为什么此程序中没有显示段错误?

质量保证

据我了解,当程序因尝试访问不可用的内存而崩溃时,就会发生分段错误。我知道第一个程序(Ac)是错误的,因为sizeof(a)为4字节* 5 = 20字节。第二个程序(Bc)由于无限循环而出错,当我运行A.out时,我不会得到任何错误,只是结果不正确(结果也不一致)。但是当我运行B.out时,出现了分段错误。

我希望A与B有相同的分段错误,因为它们都访问了范围外的内存数据int a[5] = {1, 2, 3, 4, 5};有人可以告诉我为什么吗?

交流电

int main() {
    int a[5] = {1, 2, 3, 4, 5};
    unsigned total = 0;
    printf("size of a is %lu\n", sizeof(a));
    printf("total was %d\n", total);
    for (int j = 0; j < sizeof(a); j++) {
        total += a[j];
    }
    printf("sum of array is %d\n", total);
}

公元前

int main() {
    int a[20];
    for (int i = 0; ; i++) {
        a[i] = i;
    }
}
布莱希特·桑德斯

需要澄清的是:由于不断检查代码是否超出范围,因此不会出现分段错误。相反,它是一种CPU级别的机制,涉及告诉CPU RAM的哪个区域应该发生某些情况,并捕获违反此情况的情况。RAM的该区域也不完全是代码或数据的大小。因此,在某些情况下,访问日期超出范围就是正在访问CPU可能会访问的内存,例如,在您访问的变量或数组之后存储的另一个变量或数组的索引过高,甚至是一些未使用的内存,因为允许的内存块可能会具有四舍五入以匹配某些对齐边界的大小。

我认为不会int a[5] = {1, 2, 3, 4, 5};导致您的应用程序失败。如果遗漏了,= {1, 2, 3, 4, 5}您仍然定义了一个有效的存储块来访问,只是其内容尚未定义。

您是否期望A会因为使用sizeof(a)而不是而失败sizeof(a)/sizeof(int)假设anint为4个字节,这将导致A访问的内存是所允许的4倍。这很可能仍将保留在堆栈内存中,在此不会引起分段错误。在B中,您有一个无限循环,这导致它无法解决堆栈大小的问题,这将导致分段错误。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么此Java程序没有显示错误?

来自分类Dev

为什么此UILabel没有显示在SKScene中?

来自分类Dev

为什么此Java程序中没有竞争条件

来自分类Dev

为什么此代码段失败并显示``AttributeError:'CustomAdapter'对象没有属性'setLevel'''?

来自分类Dev

为什么该Java程序没有显示错误?

来自分类Dev

为什么此代码段显示编译错误?

来自分类Dev

为什么此程序集存在段错误?

来自分类Dev

为什么此C程序在此位置出现段错误?

来自分类Dev

为什么在IDLE中运行此脚本时为什么没有收到错误消息?

来自分类Dev

为什么此C程序崩溃?没有错误报告

来自分类Dev

为什么错误消息没有显示

来自分类Dev

为什么没有对空指针取消引用的段错误?

来自分类Dev

Docker:来自守护程序的错误响应-为什么它没有显示在Docker容器ls中?

来自分类Dev

为什么此SKEmitterNode没有显示其预期效果?

来自分类Dev

为什么没有显示此共享的Angular服务数据?

来自分类Dev

为什么此Glass应用程序没有出现在Glass Launcher中?

来自分类Dev

Access.get / 3中没有匹配的功能子句-为什么会出现此错误?

来自分类Dev

为什么弹出窗口没有在所有应用程序中显示

来自分类Dev

当我输入一段代码时,为什么下拉菜单中没有显示文本

来自分类Dev

为什么我的Android Studio程序中的editText部分没有显示在我的AVD中?

来自分类Dev

为什么此Java代码中没有竞争条件?

来自分类Dev

为什么没有在函数中设置此结构

来自分类Dev

为什么此代码中没有结果?

来自分类Dev

为什么图标没有显示在Shiny应用程序的DT :: datatable中?

来自分类Dev

为什么图像没有显示在我的Apple Watch应用程序中?

来自分类Dev

为什么我的程序没有在外壳中显示嵌套的if和else?

来自分类Dev

为什么加密功能没有显示在磁盘实用程序中

来自分类Dev

为什么该Java程序没有显示预期的结果?

来自分类Dev

为什么该Java程序没有显示预期的结果?

Related 相关文章

  1. 1

    为什么此Java程序没有显示错误?

  2. 2

    为什么此UILabel没有显示在SKScene中?

  3. 3

    为什么此Java程序中没有竞争条件

  4. 4

    为什么此代码段失败并显示``AttributeError:'CustomAdapter'对象没有属性'setLevel'''?

  5. 5

    为什么该Java程序没有显示错误?

  6. 6

    为什么此代码段显示编译错误?

  7. 7

    为什么此程序集存在段错误?

  8. 8

    为什么此C程序在此位置出现段错误?

  9. 9

    为什么在IDLE中运行此脚本时为什么没有收到错误消息?

  10. 10

    为什么此C程序崩溃?没有错误报告

  11. 11

    为什么错误消息没有显示

  12. 12

    为什么没有对空指针取消引用的段错误?

  13. 13

    Docker:来自守护程序的错误响应-为什么它没有显示在Docker容器ls中?

  14. 14

    为什么此SKEmitterNode没有显示其预期效果?

  15. 15

    为什么没有显示此共享的Angular服务数据?

  16. 16

    为什么此Glass应用程序没有出现在Glass Launcher中?

  17. 17

    Access.get / 3中没有匹配的功能子句-为什么会出现此错误?

  18. 18

    为什么弹出窗口没有在所有应用程序中显示

  19. 19

    当我输入一段代码时,为什么下拉菜单中没有显示文本

  20. 20

    为什么我的Android Studio程序中的editText部分没有显示在我的AVD中?

  21. 21

    为什么此Java代码中没有竞争条件?

  22. 22

    为什么没有在函数中设置此结构

  23. 23

    为什么此代码中没有结果?

  24. 24

    为什么图标没有显示在Shiny应用程序的DT :: datatable中?

  25. 25

    为什么图像没有显示在我的Apple Watch应用程序中?

  26. 26

    为什么我的程序没有在外壳中显示嵌套的if和else?

  27. 27

    为什么加密功能没有显示在磁盘实用程序中

  28. 28

    为什么该Java程序没有显示预期的结果?

  29. 29

    为什么该Java程序没有显示预期的结果?

热门标签

归档