1

在以下代码中:

char *p = "Linux";

堆栈上的“Linux”内存还是程序的只读段?

参考文章12 有趣的 C 面试问答中的第 9 题。

谢谢。

4

2 回答 2

3

该实现可以自由地将其存储在任何它想要的地方。它是一个常数,所以它可以在只读存储器中,但不是必须的。

我的 C 编程讲师总是说它在堆栈上,因此存在疑问。

他可能指的是指针。考虑:

char *p = "Linux";
p = "Rules";

在第二行中,从指向“Linux”变为指向“Rules”。刚刚改变的那个东西在堆栈上。

于 2012-11-27T00:38:53.363 回答
0

正如链接所说,它不存储在动态分配的内存中,而是存储在代码本身所在的内存中。即只读部分。因此,尝试更改它会导致段错误的原因。

于 2012-11-27T00:44:07.393 回答