Avatar ·

什么是 C++ 中的 segmentation fault(段错误)以及它为什么会出现?

大家好!我是 C++ 新手,遇到了一个奇怪的错误。我的程序编译没有错误,但运行时崩溃并显示 "Segmentation fault (core dumped)"。我甚至不明白这意味着什么。 以下是我遇到这个问题的简化代码: ```cpp #include using namespace std; int main() { int* ptr; *ptr = 42; // 这里发生崩溃 cout << *ptr << endl; return 0; } ``` 我只是声明了一个指针 `ptr` 并尝试向它写入值。为什么程序会崩溃?我听说这与内存有关,但我不了解细节。 我还有另一个关于数组的例子: ```cpp int arr[5] = {1, 2, 3, 4, 5}; for (int i = 0; i <= 5; i++) { cout << arr[i] << endl; // 最后一次迭代出错 } ``` 这里我越界访问了数组,但为什么这会导致 segmentation fault,而不是仅仅输出垃圾值?请解释一下什么是 segmentation fault,它产生的原因以及如何避免。