我正在开发一个项目,我必须在其中创建一个字符串数组(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;
}
谢谢。
答案 0 :(得分:5)
cptr = malloc(256 * sizeof(char));
以上是错误的。即使您计算上面分配的字节数,也是256字节。如果指针的大小在你的机器上是4个字节,那么64个指针就足够了。相反,你需要256个指针。使用
cptr = malloc(256 * sizeof(char *));