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

Mar*_* Z. 0 c malloc pointers dynamic-allocation

我试图malloc在初始化另一个动态分配的数组后再次调用,但我的程序无法运行(尽管它可以通过编译).我的部分代码如下.

table = (Node **)malloc(m * sizeof(Node*));

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

table2 = (Node *)malloc(n * sizeof(Node));
Run Code Online (Sandbox Code Playgroud)

错误信息如下:

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.
Run Code Online (Sandbox Code Playgroud)

最奇怪的是,我发现我的程序在删除上面代码中的第二行和第三行后可以成功运行,其中NULL分配了table[i].我有点困惑,因为我不知道是什么原因导致这个malloc错误.另外,分配NULL给新分配的指针是否合适?

谢谢!

msh*_*dal 5

是不是i<=mfor第一次malloc()通话中分配的区域之外?您m在表中分配了节点指针,然后将m+1条目设置为等于NULL.