Segmentation fault (core dumped) 代码分析

astone2007 发布于 2013/08/12 14:24
阅读 2K+
收藏 0
GCC

运行时提示Segmentation fault (core dumped),想了解下段错误是如何产生的?

#include<stdio.h>

struct S
{
        int i;
        int *p;
};

int main()
{
        struct S s;
        int *p= &s.i;
        p[0]=4;
        p[1]=3;
        s.p= p;
        s.p[1]=1;
        s.p[0]=2;
        return 0;
}
~
编译器是gcc, gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 


加载中
0
hawkyoung
hawkyoung
这代码好绕 s.p指向了p指向了s.i 这是你希望的结果吗?p[1]=3;是要干嘛
0
hudsonzuo
hudsonzuo

一共分配了12个字节的数据,s.i, s.p , p分别使用4个字节。

s.p[1]=1, 将中间4个字节赋值为1,可是s.p这个变量使用的就是这4个字节,

所以s.p[0]=2,相当于要在地址等于1的空间写入2,当然导致非法写入了。

如果把最后两行换一下,程序不会报错,问题就更隐蔽了。

0
几点人
几点人
最主要的是要领会指针p(不是结构内),它是一个整型的指针,p[0]可以定位,p[1]就已经不知道给哪儿赋值了,所以p[1]应去掉。所以s.p[1]=1也应去掉,程序才不会出现coredump了。
返回顶部
顶部