我正在使用this post中的代码来分配一个2D数组的字符串(实际上是一个3D数组),在完成它之后,我必须释放所有分配的内存,所以我反过来做这样:
void freeArray(int col, int line, char*** dict)
{
int i=0,j=0;
for(i=0;i<line;i++)
{
for (j=0;j<col;j++)
free(dict[i][j]);
free (dict[i]);
}
free (dict);
}
但是一旦它到达第一行free
,它就会崩溃并出现下一个消息:
“HEAP CORRUPTION DETECTED:正常阻止(#67)后,位于0x00489890。 CRT检测到应用程序在堆结束后写入内存 缓冲液中。
为了帮助你们,我必须说我有一种感觉,我知道问题来自哪里,但不知道如何修复它因为我不太了解指针。对于添加到字典中的任何单词或定义,我必须分配确切的大小。所以我使用了一个声明如下的函数:int inputString(char* p1, char* p2)
,这里是调用:i+=inputString(dictionary[0][i],dictionary[1][i]);
。
首先,我将字符串输入缓冲区,然后执行此操作:
*p1=*(char*)malloc(strlen(wBuffer)+1);
*p2=*(char*)malloc(strlen(dBuffer)+1);
我不知道,关于这两行的事情感觉很奇怪,不要误解我,字典在这两行中完美地工作(free()
除外)。
我该怎么办 ?
我正在使用VS2012。