【问题标题】:Segmentation faults: what they are and general tips for how to avoid them?分段错误:它们是什么以及如何避免它们的一般提示?
【发布时间】:2011-12-10 14:22:26
【问题描述】:

我遇到的大多数来源都将分段错误定义为以下内容:它们发生在程序引用未定义的虚拟内存区域时

但由于我还没有上过操作系统的课程,我通常不知道这是什么意思,它是虚拟内存的“未定义区域”......

另外,我的很多 C 程序往往会遇到分段错误,不幸的是我不知道如何修复它们。有没有什么好的技巧可以避免这些错误,以及在程序的所有逻辑似乎都正常的情况下遇到错误该怎么办?

【问题讨论】:

  • 一个简单的答案:学习编程。您不需要对任何操作系统有任何深入的了解,您只需要了解您的编程语言即可。

标签: segmentation-fault


【解决方案1】:

更简单地说,分段错误是您正在读取或写入您不允许访问的内存,因为您不拥有它。

一个简单的例子是在堆栈上使用一个变量,然后是一些代码。说我们有

char a[4];
int i=0;
for(i=0; i<1000; ++0)
     a[i]='a';
printf("Hi this line will never get printed because last line killed it\n");

所以在堆栈上,我们有 4 个字节分配给 'a',另外 4 个字节分配给 int 'i',现在我们有了作为函数的代码。事情是 for 语句将 1000 字节写入 'a' 覆盖了 'i',并杀死了它后面的代码。

【讨论】:

    猜你喜欢
    • 2023-03-12
    • 2017-10-19
    • 2020-09-23
    • 1970-01-01
    • 2022-08-13
    • 1970-01-01
    • 2016-12-18
    • 2011-08-03
    • 2011-07-04
    相关资源
    最近更新 更多