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

时间:2014-07-03 17:38:55

标签: c++ c memory-management memory-leaks

如果我使用以下代码char * foo = "words"。我应该在{I}之前致电free()foo = "two words"; 。这个assignemnt如何工作? 是否释放包含字符串“word”的内存,然后足够的内存来保存字符串“两个单词”然后分配然后foo设置为指向新字符串。我只是想确保我的代码尽可能高效,没有任何内存泄漏。

3 个答案:

答案 0 :(得分:4)

不,您只应为freemalloccalloc分配的对象拨打realloc

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

答案 1 :(得分:2)

无需致电free()。事实上,它会失败。像这样声明的字符串常量不在堆上,并且无论如何都将存在于程序的生命周期中。

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

答案 2 :(得分:1)

  

如果我使用以下代码char * foo = "words"。我应该在{I}之前致电free()foo = "two words";

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

  

这项任务如何运作?

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

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