请原谅我的C newbiness。
考虑以下C程序:
int doSomething() {
char *numbers="123456";
...
}
在退出此程序之前,我应该释放'数字'指针吗?
答案 0 :(得分:9)
不,你没有malloc
它。你为什么要释放它?
通常,字符串放在可执行文件的只读部分中。
答案 1 :(得分:4)
在C语言中,你不能也不能“释放”指针。指针是普通的标量变量。在“释放”或类似的事情方面,你无法用它们做任何事情。
可以“释放”的是指针指向的内存。但在C中,您只需释放由malloc
/ calloc
/ realloc
明确分配的内存。调用free
即可释放此类内存。
再次注意,在您的程序中,您可能有几个(一百个)指针指向分配内存的相同块。最终,你必须释放那个内存块。但无论您指向该块的指针有多少,您都必须准确释放该内存块一次。您有责任确保将其发布。确保您完全释放一次是您的责任。我告诉你这只是为了说明你发布的是内存块,而不是指针。
在您的示例中,您的指针指向任何上述函数从未分配的内存块。这立即意味着您不需要发布任何内容。
答案 2 :(得分:3)
不,没有必要这样做,这样做是不正确的(感谢dmckee)。字符串将位于二进制文件的data segment中,因此无法释放。内存未动态分配。
“数字”将在堆栈上,因此当函数返回时它将消失。
答案 3 :(得分:2)
您实际上不需要调用delete或free,这些运算符仅用于清理已分配运行时内存分配器的内存,如malloc,calloc,GlobalAlloC,HeapAlloc等。当您在示例中定义指针时,实际上是在可执行文件中为字符数组分配空间。如此大的字符串长度将是可执行文件大小,从而增加您的工作集。
答案 4 :(得分:1)
没有;没有什么可以释放的。字符串文字“123456”是一个带有静态范围的char(C ++中的const char)数组。它的内存在程序启动时分配并保持到程序退出。您所做的就是将字符串文字的地址分配给numbers
;你还没有真正分配任何内存。
答案 5 :(得分:0)
不,它指向过程数据段中预先分配的内存。只有free(3)
您拥有的内容malloc(2)
- ed(模拟某些库函数,例如getaddrinfo(3)
/ freeaddrinfo(3)
。)
答案 6 :(得分:0)
不,因为它没有被malloc / calloc / realloc分配。
它将自动“释放”,因为它是一个自动变量。