gpt4 book ai didi

c - 为什么我不能释放 malloc 的字符串?

转载 作者:行者123 更新时间:2023-12-02 05:37:42 24 4
gpt4 key购买 nike

我有这个代码:

#define ABC "abc"

void main()
{
char *s = malloc(sizeof(char)*3);
printf("%p ", s);
s = ABC;
printf("%p ", s);
free(s);
}

这是输出:

0x8927008 0x8048574 Segmentation fault (core dumped)

如您所见,字符串 s 的地址在赋值后发生变化(我认为这就是 free() 给出段错误的原因)。任何人都可以向我解释为什么以及如何发生这种情况吗?谢谢!

最佳答案

线

s = ABC;

更改 s 以指向可能在只读内存中的不同字符串。尝试释放此类内存会导致未定义的行为。可能会发生崩溃。

我想你想要

strcpy(s, ABC);

相反。这会将字符数组“abc”复制到 s 中。请注意,这将导致进一步的错误 - s 太短并且在 ABC 末尾没有空间用于 nul 终止符。将您的分配更改为 4 个字节以解决此问题

char *s = malloc(4);

或使用

char *s = malloc(sizeof(ABC));

如果 ABC 是您要存储的最大长度。

关于c - 为什么我不能释放 malloc 的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13511754/

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