在char * var中分配的内存;宣言

时间:2012-05-16 07:45:38

标签: c string cstring string-literals

在C中,声明一个像这样的字符指针

char* p="Hello";

为字符串文字Hello\0分配一些内存。当我之后这样做时

p="FTW";

分配给Hello\0的内存会发生什么变化?地址p是否指向更改?

6 个答案:

答案 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()。