【发布时间】:2015-07-04 02:27:33
【问题描述】:
我试图在初始化另一个动态分配的数组后再次调用malloc,但我的程序无法运行(尽管它可以通过编译)。我的部分代码如下。
table = (Node **)malloc(m * sizeof(Node*));
for(i=0; i<=m; i++)
table[i] = NULL;
table2 = (Node *)malloc(n * sizeof(Node));
错误信息如下:
malloc.c:2372: sysmalloc: Assertion `(old_top == (((mbinptr) (((char *) &((av)
->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_si
ze == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (st
ruct 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.
最奇怪的是,我发现我的程序在删除上面代码中的第二行和第三行后可以成功运行,其中NULL被分配给table[i]。我有点困惑,因为我不知道是什么导致了这个malloc 错误。另外,将NULL分配给新分配的指针是否合适?
谢谢!
【问题讨论】:
-
malloc返回的指针是否有效?显示所有相关代码。断言的哪一部分实际上失败了? -
i<=m将在 i == m 时访问未分配的内存。 -
如果那是 C 代码:不要像
malloc返回的那样转换void *!删除 C++ 标记,这些是不同的语言,您也不会因为它们的某些语法相同而添加 Java。 -
我从未听说过“C/C++”这门语言是新的吗?
-
不客气。 valgrind 会告诉你的。
标签: c pointers malloc dynamic-allocation