gpt4 book ai didi

c - 如果打印此内存位置的内容,为什么会出现段错误

转载 作者:行者123 更新时间:2023-12-01 13:29:56 25 4
gpt4 key购买 nike

假设我执行以下操作

int *p = 1;
printf("%d", *p);

我遇到段错误。现在,据我所知,这个内存位置 1 在我程序的地址空间中。为什么读取此内​​存位置会出现问题?

最佳答案

你的指针没有指向任何有效的东西。您所做的只是将值 1 分配给指向 int 的指针,但 1 不是有效的内存位置。

获取指针值的唯一有效方法是获取变量的地址或调用分配函数:

int a;
int * p1 = &a; // OK
int * p2 = malloc(sizeof(int)); // also OK

*p1 = 2;
*p2 = 3;

至于“为什么应该有问题”:就语言而言,如果你取消引用一个无效的指针,你有未定义的行为,所以任何事情都可能发生——这确实是唯一明智的指定方式如果您不想引入任何任意限制,则可以使用 C 语言,而 C 语言就是易于实现。

实际上,现代操作系统通常会有一个聪明的虚拟内存管理器,它需要在需要的时候请求内存,如果地址 1 的内存还没有在提交的页面上,你实际上会从操作系统中得到一个错误。如果您在某个实际地址附近尝试一个指针值,您可能不会收到错误(直到您越过页面边界,也许)。

关于c - 如果打印此内存位置的内容,为什么会出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7870104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com