为什么这段代码给我一个分段错误

时间:2021-06-02 19:52:36

标签: c++ mingw

使用 MINGW 编译器在 Visual Studio 代码上运行此代码,结果出现分段错误

 #include <iostream>
    using namespace std;
    int main()
    {
        int *b;
        *b = 20;
    }

2 个答案:

答案 0 :(得分:1)

您的代码具有未定义的行为b 未初始化,它没有指向任何有意义的地方。因此,取消引用 b 将导致随机内存地址,写入该内存会使您的程序崩溃(但这不能保证,您可能只会损坏内存)。

您需要将 b 指向有效的 int,例如:

int main()
{
    int i;
    int *b = &i;
    *b = 20; // writes to i
}

答案 1 :(得分:0)

你的第一个 Line 定义器是一个指向 int 的指针,没有设置它指向的位置,所以它可以指向任何地方。

您的第二行将数字 20 写入 b 恰好指向的内存位置,在您的情况下,这是导致分段错误的内存位置。

你想要的是 int *b = new int();为指针分配一个有效的内存位置。