为什么我得到malloc错误?

时间:2014-07-24 06:21:02

标签: linux timer 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。 感谢。

2 个答案:

答案 0 :(得分:1)

您会收到此错误

  

*检测到glibc * /media /.../Menu:malloc():内存损坏:0x0805d0f8 *

如果您正在尝试访问未由您分配的内存区域,或者您必须溢出分配,例如分配4个字节并访问5个字节。

要回答你的问题,请使用pStruct构造一个struct变量或一个struct指针 如果它是变量,则应将timer_create更改为此

  

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

答案 1 :(得分:1)

我猜您的代码中有一些memory corruption 其他之前实际调用代码timer_create

您应该使用gcc -Wall -g使用valgrind 进行编译;如果您的系统上有valgrind,我看不出有任何理由可以避免使用-fsanitize=address

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

尝试使用最近的 GCC 4.9(或甚至4.8)编译器 - 或者使用最近的 Clang编译器 - ,{ {3}};也就是说,将{{1}}添加到编译(和链接)标志中。