【发布时间】:2009-09-28 15:51:40
【问题描述】:
我有一个 C++ 程序 (GCC),当我将一个或多个 int 成员添加到抽象基类时,程序开始崩溃。在我检查过的情况下,似乎通过添加此成员,派生类中的成员退出初始化(或在某些时候被踩到)。如果我添加更多成员,它开始(不)工作不同。这真的很奇怪,因为该成员从未在任何地方使用过。我可以注释掉那一行,程序重新编译就好了,运行没有错误。
整个程序约为 3KLOC,很难剥离。
我完全不知道从哪里开始寻找。有什么想法吗?
更新
我发现了问题:free-ing malloc-ed 内存和delete-ing new-ed 内存在同一个程序中不安全。
【问题讨论】:
-
我们也不知所措,因为我们不知道您的代码是什么样的。发布抽象类。发布派生类。在它崩溃的地方发布代码行。发布一些东西!
-
您是否构建了所有其他相关的二进制文件?例如,如果您的 Windows 正在使用多个 Dll 之类的东西,而您的基类是一个 dll,而派生在另一个 dll 中,那么您需要同时构建两者。
-
如果您能提供仍然重现故障的最小程序,那将非常有帮助。我知道这可能需要您付出很大的努力。
-
@BCS:这意味着您可以按照 quamrana 的建议解决问题!
-
关于更新,我想这在某些平台上可能是个问题,但我从来没有在同一个程序中同时执行 malloc/free 和 new/delete 遇到问题(使用旧库的乐趣)。当然,malloc/delete 或 new/free 可能会导致很多问题...