在C中使用free()时出现运行时错误

时间:2013-12-24 16:38:36

标签: arrays pointers malloc heap free

我正在使用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。

0 个答案:

没有答案