
用动态库会报 memory corruption 的错误,如果不用动态库直接编译运行就不会有这个错。 代码如下:
#include <queue> #include <iostream> #include "MTime.h" using namespace std; int main(void) { queue<int> a; TMTime *_MTime = NULL; _MTime = new TMTime; if (_MTime != NULL) { cout << "yes" << endl; int k = _MTime->MTimeInit(); cout << k << endl; } int *k = new int; return 0; } 其中,TMTime 是自己实现的类,内容非常简单。 另: 把代码中的 queue 换成 vector 或者 map 等都不会报错,替换三者的顺序也不会报错。 请大神给点启发。
1 exch4nge 2017-12-19 18:24:56 +08:00 只看这段代码应该没有什么特别的。如果楼主的动态库是分开编译的话,有可能因为是动态库编译时用的设置不一样。 |
2 zhouheyang0919 2017-12-19 19:26:56 +08:00 Undefined Behavior 的典型结果。 用 valgrind 之类的工具调试看看。 |
3 forestyuan 2017-12-19 21:39:38 +08:00 可能跟 TMTime 的实现有关 |
4 htfy96 2017-12-19 21:51:22 +08:00 虽然可能和 memory corruption 没啥关系,但是这代码质量不得不让人怀疑 TMTime 实现有 bug ……其次再怀疑动态库的一些坑 - C++ 不需要 main(void)中的 void和最后的 return 0 - 单下划线+大写字母开头是保留的(_MTime ) - new 不会返回 null,而是抛异常 (当然如果你是 VC6/重载了 new 当我没说……) |
5 tengtengking OP |
6 fooofei 2018-02-23 22:22:06 +08:00 via iPhone 挺好奇的 能让我看看整个工程吗 |
7 tengtengking OP @fooofei 抱歉不能给你看。 不过这个错误找到了,是因为编译和运行时用的不是同一个动态库文件。 |