【发布时间】:2017-06-29 10:24:57
【问题描述】:
我在 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 是编译器。
托尼
【问题讨论】:
-
你有没有看到任何可以保证文档中“崩溃”的东西?
-
访问无效指针是未定义的行为。编译器没有义务保证一旦遇到 UB 就会崩溃。根据定义,UB 意味着行为是不可预测的。
-
什么是令人难以置信的片段?我想了解更多关于这些的信息!
-
if (b->e) 后面的代码将使用 c。如果 b 是一个空指针,我认为它应该在 c = b->c 崩溃,而不是在下面的代码中,我之前遇到过这样的崩溃,使用相同的编译器参数。
标签: c