1

我会尽量以最好的方式问我的问题:

我想使用来自相机制造商的示例代码(只有一个名为“main.cpp”的文件)在 Ubuntu 11.10 下从我的相机中读取图像。如果我使用示例项目,一切正常,我会收到图像数据。但是如果我将这个“main.cpp”添加到我的真实项目中并编译,应用程序就会崩溃。

很难确定导致此错误的部分。但是,如果我从我身上删除一些代码(这些代码已编译但绝对没有使用!),程序会按预期工作。我猜在编译我的代码时我链接的另一个库会导致错误(例如 Opencv 或 boost?)。我试图找出导致这种行为的部分,但如果你们能同时告诉我,如果可以从这个 Gist 上找到的这个崩溃消息中提取有用的信息,我会很高兴。

我的 libc 损坏了吗?

4

1 回答 1

0

libc中的错误?

不。

*** glibc detected *** ./myProject: double free or corruption (!prev): 0x09c12660 ***

此错误意味着您的应用程序以某种方式损坏了堆。它可能已经free两次编辑同一个指针,或者它可能已经写入超过分配缓冲区的末尾。

查找此类堆损坏错误的工具是Valgrind

仅当您链接额外代码时才会发生崩溃这一事实可能只是一个意外——即使没有额外代码,该错误也可能存在于应用程序中,但尚未在崩溃中表现出来。

额外的代码也有可能引入错误,尽管可能性较小。

无论哪种情况,一旦在 Valgrind 下运行应用程序,错误就会变得明显。

于 2012-06-22T05:02:14.157 回答