我试图使用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
添加到编译(和链接)标志中。