首页 linux 应用正文

c种内存分配错误:malloc.c:3096: sYSMALLOc: Assertion

今天在学习一个小程序的时候出现了下面的内存分配错误。 rbtest: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Aborted 经过baidu查资料之后得知是因为内存的分配使用有问题,在malloc和free还有malloc获得内存的使用上会有这样的问题, 在程序中,如果越界使用了上一次malloc(或new)分配的空间,则会导致本次分配出错(错误提示就是上面的),所以针对这种问题就需要仔细分析代码种malloc后的内存是否正确使用,我的代码中我又仔细看了之后发现了问题: 内存分配的结构体是这样的 typedef struct TNode
{
int key;
struct TNode *parent,*left,*right;
}TNode,*Tree; 内存分配和使用是这样的: root = (Tree)malloc(sizeof(Tree)); //上面这里明显的错误,这里是申请了一个指针空间,而不是结构体空间,所以下面的结构体赋值就会错误,会出现内存访问越界等问题,或者不出问题,为下次的内存分配造成影响,这里的影响也就是上面所出现的错误。 root->left=NULL;
root->right=NULL;
root->key=-1; 这样处理之后,程序可以正常走下去,但是你再次malloc分配内存的时候就会出现malloc.c:3096这个错误了. 我的程序也正是在这样的情况下出的问题: Tree x = (TNode *)malloc(sizeof(TNode)); 这里是第二次申请内存的地方,这里便出了问题了。

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

评论