gpt4 book ai didi

c - 尝试在 C 中释放字符数组的数组会导致双重释放或损坏

转载 作者:行者123 更新时间:2023-12-04 11:17:45 26 4
gpt4 key购买 nike

我正在开发一个项目,在该项目中我必须创建一个字符串数组(char *),但是,当我尝试释放数组数组时,给出了“双重释放或损坏”,我无法弄清楚出问题。

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

#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;
}

谢谢。

最佳答案

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

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

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

关于c - 尝试在 C 中释放字符数组的数组会导致双重释放或损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36362225/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com