为什么会出现malloc错误



我试图使用timer_create()函数,但我得到了净错误:

*** glibc detected *** /media/.../Menu: malloc(): memory corruption: 0x0805d0f8 ***

我对函数的调用如下:

if (timer_create(CLOCK_REALTIME, &stSigEvent, &(pStruct->tTimer)) != -1)

,定义如下:

timer_t tTimer; /* in the struct pStruct */
struct sigevent stSigEvent;

目前我的程序中没有免费调用

我没有运行valgrind的选项。谢谢。

你会得到这样的错误

* glibc detected */media/…/Menu: malloc(): memory corruption: 0x0805d0f8 *

如果你试图访问一个不是由你分配的内存区域,或者你必须溢出你的分配,比如分配4个字节,访问5个字节。

回答你的问题,struct pStruct是结构变量还是结构指针如果它是一个变量,那么你应该将timer_create修改为

if (timer_create(CLOCK_REALTIME, &stSigEvent, &(pStruct.tTimer)) != -1)//注意方法已从'->'更改为'.'

我猜你的代码中有一些内存损坏在其他地方之前实际代码调用timer_create

你应该用gcc -Wall -g编译,使用valgrind;如果您的系统上有可用的valgrind,我找不到任何避免使用它的理由。

请注意,最新的valgrind 3.9可以在许多平台上运行,不仅是x86,还有ARM等…

还可以尝试使用recent GCC 4.9(甚至4.8)编译器-或者使用recent Clang编译器-,它的地址消毒器;也就是说,将-fsanitize=address添加到编译(和链接)标志中。

相关内容

  • 没有找到相关文章

最新更新