【问题标题】:What determines whether segmentation fault occurs? [duplicate]是什么决定了是否发生分段错误? [复制]
【发布时间】:2020-06-23 22:23:16
【问题描述】:
#include <stdio.h>
int main()
{    
    int array[10];
    array[50] = 5;
    printf("array[50] = %i \n", array[50]);
}

上面的代码在不应该出现的情况下可以正常工作。这是为什么?这种行为可能会使在程序中发现潜在错误变得非常棘手。

【问题讨论】:

  • "什么时候不应该" --> 不,这是未定义的行为。它可能会“起作用”,也可能不会。

标签: c


【解决方案1】:

这样的越界数组访问的行为是未定义

未定义的行为可以表现为程序按您的预期工作!

这确实使 C 编程变得棘手,并且该语言因在这方面不安全而受到批评(参见同时成长的 FORTRAN)。通过采用自 1970 年代发明 C 以来逐渐发展起来的适当编程实践,可以在一定程度上避免这种有害行为。 边界检查软件也被发明出来了,可以清除诸如此类的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-15
    • 2011-04-12
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-17
    • 2021-07-12
    相关资源
    最近更新 更多