指针更改后的堆栈内存

问题描述 投票:0回答:2

说我这样做:

const char *myvar = NULL;

之后再说

*myval = “hello”;

然后再次:

*myval = “world”;

我想了解存储“ hello”的内存发生了什么?

我知道它在只读堆栈空间中,但是该内存空间在运行时是否会一直保留在那里,并且没有其他进程可以使用该内存空间吗?

谢谢

c memory-management
2个回答
1
投票

假设您的意思

myval = "world";

代替,然后

我想了解存储“ hello”的内存发生了什么?

没事。

您只需修改指针本身以指向其他字符串文字。

并且C程序中的字符串文字是静态的固定(不可修改)字符数组,具有完整程序的生命周期。该分配实际上使指针指向此类数组的第一个元素。


0
投票

字符串文字具有静态存储期限。它们通常由编译器放置在堆栈池中。因此,在程序运行之前先创建字符串文字。

在这些语句中

*myval = “hello”;

*myval = “world”;

指针myval由这两个字符串文字的第一个字符的地址重新分配。

请注意,您不得更改字符串文字。相等的字符串文字是以静态存储持续时间存储为一个字符数组还是不同的字符数组取决于编译器选项。

从C标准(6.4.5字符串文字)

7无法确定这些数组是否有区别,只要它们元素具有适当的值。如果程序尝试执行修改这样的数组,行为是不确定的。

© www.soinside.com 2019 - 2024. All rights reserved.