如果我使用以下代码char * foo = "words"
。我应该在{I}之前致电free()
:foo = "two words";
。这个assignemnt如何工作?
是否释放包含字符串“word”的内存,然后足够的内存来保存字符串“两个单词”然后分配然后foo设置为指向新字符串。我只是想确保我的代码尽可能高效,没有任何内存泄漏。
答案 0 :(得分:4)
不,您只应为free
,malloc
或calloc
分配的对象拨打realloc
。
"words"
是一个具有静态存储持续时间的对象,您无法释放该对象。
答案 1 :(得分:2)
无需致电free()
。事实上,它会失败。像这样声明的字符串常量不在堆上,并且无论如何都将存在于程序的生命周期中。
在程序使用free()
等分配的内存上调用malloc()
答案 2 :(得分:1)
如果我使用以下代码
char * foo = "words"
。我应该在{I}之前致电free()
:foo = "two words";
。
没有。 free
的参数必须是malloc
,calloc
或realloc
函数先前返回的指针。否则,它将调用未定义的行为。
这项任务如何运作?
当编译器遇到长度为n
的字符串文字时,它会为字符串留出n+1
个字节的内存。指定字符串文字时,char
指针指向已分配内存的第一个字节。
一旦存储在内存中,字符串文字就可用于程序的生命周期
如果您将"two words"
后者分配给foo
,则仍会word
继续存储在该部分,但此部分与malloc
分配的位置不同。