难以置信的程序崩溃调用堆栈

时间:2017-02-10 23:04:07

标签: c

我在C中有一个令人难以置信的段崩溃调用堆栈,任何人都可以帮助我吗?

int function(struct A *a) 
{
    ... some other declare
    struct B *b = a->b;
    int count, len;
    ... some other declare
    struct C *c = b->c;  /* not crash here */
    ....some other decalre

    if (b->e) { /*crash log indicate b is NULL and crash here,first line instrucment code*/
    .....
    }
    ....
}

我的问题是为什么struct C *c = b->c没有发生崩溃。

GCC是编译器。

1 个答案:

答案 0 :(得分:0)

除非存在数据流依赖性,否则编译器不保证指令的有序执行。它有许多优化,其中一个是data flow optimization

此外,如果您根本不使用变量c,编译器将从代码(dead code optimization)中优化它,您可能根本看不到崩溃(如果其余的话)该程序工作正常)。

了解正在进行哪种优化的一种简单方法是在某处访问c变量。另一种方法是禁用优化(GCC中的-O0)。