我会尽量用最好的方式提出我的问题:
我想使用相机制造商的示例代码(只有一个名为"main.cpp"的文件)在 Ubuntu 11.10 下从我的相机读取图像。如果我使用示例项目,一切正常,并且我会收到图像数据。但是,如果我将此"main.cpp"添加到我的真实项目中并进行编译,则应用程序会崩溃。
很难确定导致此错误的部分。但是,如果我从我身上删除一些代码(已编译但肯定没有使用!),程序将按预期工作。我想在我的代码编译时,我链接的另一个库会导致错误(例如 Opencv 或 boost?我试图找出导致这种行为的部分,但如果你们能同时告诉我,如果有可能从这个崩溃消息中提取有用的信息,我会很高兴这个 Gist 上可以找到。
我的 libc 损坏了吗?
libc 中的错误?
不。
*** glibc detected *** ./myProject: double free or corruption (!prev): 0x09c12660 ***
此错误意味着应用程序以某种方式损坏了堆。它可能free
同一指针两次,或者可能已写入已分配缓冲区的末尾。
查找此类堆损坏错误的工具是Valgrind。
只有当你链接额外的代码时才会发生崩溃,这可能只是一个意外——即使没有额外的代码,这个错误也可能存在于应用程序中,但还没有表现在崩溃中。
额外的代码也有可能引入错误,尽管可能性较小。
在任何一种情况下,一旦您在 Valgrind 下运行应用程序,错误应该变得很明显。