繁体   English   中英

等号是否在char *中重新分配内存?

[英]Does the equal sign reallocate memory in a char *?

如果我使用以下代码char * foo = "words" 我应该在做之前调用free()吗: foo = "two words"; 此分配如何工作? 是否释放了包含字符串“ word”的内存,然后有足够的内存来容纳字符串“两个单词”,然后分配,然后将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分配的位置不同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM