【发布时间】:2016-08-24 13:37:49
【问题描述】:
在以下代码中,当我尝试释放 2D 字符数组(即 2dArray[l])的各个元素时,出现错误(_crtisvalidheappointer(puserdata) dbgheap.c): 关于错误原因的任何想法?
#include<stdio.h>
int main(){
char ** TwodArray= NULL;
int k = 0;
int j = 0;
do{
k++;
for (int i= 0; i<10; i++){
j++;
TwodArray=(char**)realloc(TwodArray, (j+1)*10*sizeof(char*));
TwodArray[j-1]=(char*)malloc(10 *sizeof(char));
TwodArray[j-1] = "abcdefgh";
....
}
}while(k<3)
// free the memory
for (int l = 0; l < j; l++){
if (TwodArray[l] != NULL)
free(TwodArray[l]); // here I get the error!
}
free(TwodArray);
return 0;
}
【问题讨论】:
-
请给我们看一些真实的代码。
-
@JoachimPileborg 真正的代码很复杂很长,我这里尽量简化了!没有任何编译错误,而是我在帖子中提到的运行时错误:'_crtisvalidheapppointer(puserdata) dbgheap.c
-
好吧@Homer,问题是这段代码甚至不是c。
2dArray是无效的参数名称。无论如何,在修复缺少的包括后,;让你的 do while 循环和参数名称起作用——这个 sn-p 有效。 -
你的代码中有 no 二维数组,注意它可以代表一个也不能指向一个。指针不是数组。释放 2D 数组就像
free(my2Darray);一样简单。 -
@IshayPeled 现在它坏了!我在代码中添加了
TwodArray[j-1] = "abcdefgh";行