在C中,声明一个像这样的字符指针
char* p="Hello";
为字符串文字Hello\0
分配一些内存。当我之后这样做时
p="FTW";
分配给Hello\0
的内存会发生什么变化?地址p是否指向更改?
答案 0 :(得分:10)
两个语句中都没有动态内存分配。
这些字符串存储在您的可执行文件中,加载到(可能是只读的)内存部分,只要您的进程有效,它就会存在。
第二项作业只会改变p
指向的内容。没有其他事情发生。
答案 1 :(得分:0)
内存仍被"Hello"
占用。它丢失了(除非你有其他参考)。
地址p
指向的地方(p
的值)当然会发生变化。
答案 2 :(得分:0)
在这种情况下,“Hello”在编译时创建,并且是二进制文件的一部分。在大多数情况下,“Hello”存储在只读存储器中。 “FTW”也是二进制文件的一部分。第二次分配只会改变指针。
答案 3 :(得分:0)
另外 - "Hello"
和"FTW"
具有静态存储持续时间,正如Met所指出的那样
答案 4 :(得分:0)
它创建一个不能修改的字符串常量,应该按原样使用。
如果您尝试
p[0]='m';
它会给出分段错误,因为这不是字符串文字,而是分配的内存,您可以在其中重新分配和读回值。
答案 5 :(得分:-1)
如果
p = getbuffer();
getbuffer()
{
return buf = malloc(buf, size);
}
如何在为p分配新内存之前释放此内存!想象p应该多次使用getbuffer()。