我正在尝试在初始化另一个动态分配的数组后再次调用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
分配给新分配的指针是否合适?
谢谢!
答案 0 :(得分:5)
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 |
+---+---+---+