等号是否以字符*重新分配内存

Does the equal sign reallocate memory in a char *?

本文关键字:分配 内存 新分配 是否 字符      更新时间:2023-10-16

如果我使用以下代码char * foo = "words"。我应该先调用free(),然后再调用:foo = "two words"; 。这个代理人是如何工作的?是否释放了包含字符串"word"的内存,然后分配了足够的内存来容纳字符串"two-words",然后将foo设置为指向新字符串。我只想确保我的代码尽可能高效,并且没有任何内存泄漏。

否,您应该只为通过malloccallocrealloc分配的对象调用free

"words"是一个具有静态存储持续时间的对象,您无法释放该对象。

无需调用free()。事实上,它会失败。像这样声明的字符串常量不在堆中,并且将在程序的整个生命周期中存在。

在程序使用malloc()等分配的内存上调用free()

如果我使用以下代码char * foo = "words"。我应该先呼叫free()吗:foo = "two words";

没有。free的参数必须是以前由malloccallocrealloc函数返回的指针。否则,它将调用未定义的行为

这项任务是如何完成的?

当编译器遇到长度为n的字符串文字时,它会为该字符串留出n+1字节的内存。当字符串文字被分配给char指针时,它指向已分配内存的第一个字节

一旦存储在内存中,字符串文字在程序的整个生命周期内都是可用的
如果将"two words"后一个分配给foo,则word仍将继续存储在该部分,但该部分与malloc分配的位置不同。