试图在C中释放一组字符数组导致双重释放或损坏

时间:2016-04-01 17:18:35

标签: c arrays pointers char

我正在开发一个项目,我必须在其中创建一个字符串数组(char *),但是,当我尝试释放数组数组时,会给出“double free or corruption”,我无法想象出问题。

这里的代码提取是一个简化版本,它可能看起来毫无意义,但它说明了我面临的问题:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    char **cptr;
    int i;

    cptr = malloc(256*sizeof(char));
    for (i=0; i<256; i++) {
        cptr[i] = calloc(2, sizeof(char));
        cptr[i][0] = (char)i;
    }
    for (i=0; i<256; i++) {
        free(cptr[i]);
    }
    free(cptr);

    return 0;
}

谢谢。

1 个答案:

答案 0 :(得分:5)

cptr = malloc(256 * sizeof(char));

以上是错误的。即使您计算上面分配的字节数,也是256字节。如果指针的大小在你的机器上是4个字节,那么64个指针就足够了。相反,你需要256个指针。使用

cptr = malloc(256 * sizeof(char *));