什么是 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,它产生的原因以及如何避免。