gpt4 book ai didi

c - 执行 free() 时得到 "invalid next size"

转载 作者:行者123 更新时间:2023-11-30 15:30:52 25 4
gpt4 key购买 nike

我正在尝试学习c的内存管理。

我分配了内存

1. char** a
2. char** b
3. char* b[0] ~ b[99]

我释放了内存

1. char** a
2. char* b[0] ~ b[99]
3. char** b

但是,我在第33行遇到了错误,即free(b[0])

为什么它会产生无效的下一个尺寸空闲(快速)

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

int main()
{

char** a = (char**)malloc(100 * sizeof(char*));
a[0] = "Hello Again!";



char** b = (char**)malloc(100 * sizeof(char*));
int i = 0;
for(i = 0; i < 100; i++){
b[i] = (char*)malloc(10 * sizeof(char));
}

strcpy(b[0], *a);

free(a);

printf("%s", b[0]);

for(i = 0; i < 100; i++){
free(b[i]);
}

free(b);
return 0;

}

最佳答案

字符串 "Hello Again!" 的长度为 13 个字符(包括终止符 \0)。

您为其分配的内存不够(您只分配了 10 个字符),因此在调用 strcpy 时,您会覆盖已分配的内存,并且可能会覆盖库使用的内存位置跟踪分配情况。

下次库尝试使用存储在那里的信息时,它发现它不一致,因此它会因您提到的错误而中止。如果图书馆能够发现任何此类差异,这只是图书馆可以打印的众多消息之一。

一般来说,不要依赖库为您标记这些错误:在这种情况下,您很“幸运”,信息以可识别的方式被损坏。如果您运气不好,您的程序可能会表现出未定义的行为。

关于c - 执行 free() 时得到 "invalid next size",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25300520/

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