C++ 为什么这个代码给了我一个分段错误
使用MINGW编译器在visualstudio代码上运行此代码,它会给我一个分段错误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将导致一个随机内存地址
#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
指向的内容未定义。请解释为什么您认为不会,这样我们就不必猜测您误解了指针的哪一部分,这样您就不必通过搜索找到考试的相关部分。