初始化动态分配的数组后出现malloc()错误

时间:2015-07-04 02:27:33

标签: c pointers malloc dynamic-allocation

我正在尝试在初始化另一个动态分配的数组后再次调用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.

最奇怪的是,我发现我的程序在删除第二个&amp;我上面代码中的第三行,其中NULL被分配给table[i]。我有点困惑,因为我不知道导致此malloc错误的原因。另外,将NULL分配给新分配的指针是否合适?

谢谢!

2 个答案:

答案 0 :(得分:5)

{p> i<=m循环中的for是否会超出您在第一次malloc()来电中分配的区域?您在表中分配了m节点指针,然后将m+1个条目设置为NULL

答案 1 :(得分:1)

for(i=0; i<=m; i++)
  table[i] = NULL;

第二个表达式需要更改为i < m。您已分配m个广告位。访问范围为0...(m-1)

table,尺寸= 3

+---+---+---+
| 0 | 1 | 2 |
+---+---+---+