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

C++ 为什么这个代码给了我一个分段错误,c++,mingw,C++,Mingw,使用MINGW编译器在visualstudio代码上运行此代码,它会给我一个分段错误 #include <iostream> using namespace std; int main() { int *b; *b = 20; } #包括 使用名称空间std; int main() { int*b; *b=20; } 您的代码有未定义的行为b未初始化,它没有指向任何有意义的地方。因此,取消引用b将导致一个随机内存地址

使用MINGW编译器在visualstudio代码上运行此代码,它会给我一个分段错误

 #include <iostream>
    using namespace std;
    int main()
    {
        int *b;
        *b = 20;
    }
#包括
使用名称空间std;
int main()
{
int*b;
*b=20;
}

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

您需要在有效的
int
处设置
b
点,例如:

intmain()
{
int i;
int*b=&i;
*b=20;//写入i
}

您的第一行定义器是指向int的指针,无需设置它指向的位置,因此它可以指向任何地方

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


您需要的是int*b=newint();为指针分配有效的内存位置。

要取消引用指针(
*b
),指针必须指向有效的对象。目前,
b
未初始化,因此,
b
指向的内容未定义。请解释为什么您认为不会,这样我们就不必猜测您误解了指针的哪一部分,这样您就不必通过搜索找到考试的相关部分。