![](/img/trans.png)
[英]Does the standard guarantee, that std::string::resize will not do reallocate memory, if the new size is less than or equal to as the old one?
[英]Does the equal sign reallocate memory in a char *?
如果我使用以下代码char * foo = "words"
。 我应该在做之前调用free()
吗: foo = "two words";
。 此分配如何工作? 是否释放了包含字符串“ word”的内存,然后有足够的内存来容纳字符串“两个单词”,然后分配,然后将foo设置为指向新字符串。 我只想确保我的代码尽可能高效且没有任何内存泄漏。
不,您只能为通过malloc
, calloc
或realloc
分配的对象free
调用。
"words"
是具有静态存储持续时间的对象,您无法释放该对象。
无需调用free()
。 实际上,它将失败。 这样声明的字符串常量不在堆上,并且在程序的整个生命周期中都将存在。
在程序使用malloc()
等分配的内存上调用free()
。
如果我使用以下代码
char * foo = "words"
。 我应该在做之前调用free()
吗:foo = "two words";
。
号参数,以free
必须是先前由任一返回一个指针malloc
, calloc
或realloc
功能。 否则它将调用未定义的行为 。
这项工作如何进行?
当编译器遇到长度为n
的字符串文字时,它会为字符串预留n+1
个字节的内存。 当给字符串常量分配文字时, char
指针指向分配的内存的第一个字节。
一旦存储在内存中,字符串文字就可以在程序的生命周期中使用。
如果将后面的"two words"
分配给foo
,则仍然将继续在该部分存储word
,但是该部分与malloc
分配的位置不同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.