首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这真的是导致分段错误的原因吗(专家C编程7.7)

这真的是导致分段错误的原因吗(专家C编程7.7)
EN

Stack Overflow用户
提问于 2017-09-06 10:49:08
回答 3查看 67关注 0票数 0

嗨,在专家C编程的7.7节中有一个例子,它会导致分段错误。

代码语言:javascript
复制
  int *p =0;
  *p =17; /*caused segmentation fault */

但我已经测试过了,如下:

代码语言:javascript
复制
#include <stdio.h>
int main()
{
        int *p =0;
        *p = 17;
        return 0;
}

我做gcc -c测试c的时候没问题,没有分段错误?为什么?

EN

回答 3

Stack Overflow用户

发布于 2017-09-06 10:52:45

代码语言:javascript
复制
*p=17;

P指向invaid内存,你正在那里存储一个值。

当你写入无效内存时,它会导致未定义的行为,你可能是幸运的程序没有在段错误中出错。

票数 0
EN

Stack Overflow用户

发布于 2017-09-06 10:52:45

我在你的程序中多加了一行。它是核心转储的。当您尝试访问指针变量时,它将核心转储,因为您没有为指针变量p分配内存。

代码语言:javascript
复制
    #include <stdio.h>
    int main()
    {
            int *p =0;
            *p = 17;
            printf("%d",*p);
            return 0;
    }
票数 0
EN

Stack Overflow用户

发布于 2017-09-06 11:00:29

P应该存储整数的地址,但是它存储的是0。然后,您将访问地址0并在那里存储17。0可能甚至不是有效地址,因此行为未定义。Segfault是其中一种可能的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46066016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档