c - malloc.c :3096: SYSMALLOC: Assertion failed

标签 c malloc

我的函数如下:

void Insert_ldb(int t){
    struct node_ldb *temp_ldb1,*lastnode_ldb;
    temp_ldb1=root_ldb[t];
    while(temp_ldb1->next!=NULL)
        temp_ldb1=temp_ldb1->next;
    if(temp_ldb1->next==NULL){
         lastnode_ldb=malloc(sizeof(*lastnode_ldb));//error appears at this line
         temp_ldb1->next=lastnode_ldb;
    }
}

结构体 node_ldb 定义为:

struct node_ldb{
    int sno;
    int *lvar;
    int *object;
    struct node_ldb *next;
};

编译时没有出现错误,但执行时终止并显示消息:

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

奇怪的是同一个函数在终止之前成功执行了很多次。那么错误是否可能发生在其他地方?因为即使是 valgrind 也不会显示任何错误。可能是什么问题?

最佳答案

这闻起来很像是在调用 malloc() 之前发生了内存管理损坏。

损坏的内存管理数据导致对 malloc() 的调用失败。

我强烈建议使用内存检查器(例如 Valgrind)运行该程序,直到重现故障。

关于c - malloc.c :3096: SYSMALLOC: Assertion failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18673605/

相关文章:

c - 使用 malloc 为我的 C 卡组分配内存?

c - 这个缓冲区怎么会溢出?

c - realloc 有什么问题?

创建ip网络数据包

c - #include <x/y.h> 适用于一个项目文件但不适用于其他项目文件?需要更改文件配置?

c - ANSI C - 初始化数组

objective-c - 从函数外部的 C 风格函数访问 NSString

c++ - 如何在我的 .c 文件中只包含几行头文件(只读文件)

c - 我是否在我的结构指针上正确地调用了 free() ?

c - 是否有一组指南或建议用于将 `malloc()` 实现从使用 `sbrk()` 切换到 `mmap()` ?