首页 文章

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

提问于
浏览
0

在C中,声明像这样的char指针

char* p="Hello";

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

p="FTW";

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

6 回答

  • -1

    两个语句中都没有动态内存分配 .

    这些字符串存储在您的可执行文件中,加载到(可能是只读的)内存部分,只要您的进程有效 .

    第二个作业只会改变 p 指向的内容 . 没有其他事情发生 .

  • 0

    内存仍由 "Hello" 占用 . 它丢失了(除非你有其他参考) .

    地址 p 指向( p 的值)当然已更改 .

  • 0

    在这种情况下,“Hello”在编译时创建,并且是二进制文件的一部分 . 在大多数情况下,“Hello”存储在只读存储器中 . “FTW”也是二进制文件的一部分 . 第二次分配只会改变指针 .

  • 10

    此外 - 正如Met指出的那样, "Hello""FTW" 具有静态的持续时间

  • 0

    它创建一个不能修改的字符串常量,应该按原样使用 .

    如果你尝试做

    p[0]='m';
    

    它会给出分段错误,因为这不是具有已分配内存的字符串文字,您可以在其中重新分配和读回值 .

  • 0

    如果

    p = getbuffer();
    
    getbuffer()
    {
       return buf = malloc(buf, size);
    }
    

    如何在为p分配新内存之前释放这个内存!想象一下p应该多次使用getbuffer() .

相关问题