这将是两个问题
我有两段代码,唯一的区别是 int* a 的声明顺序;和int cpt = 0;在第 6 行和第 7 行。
情况1:
#include <iostream>
using namespace std;
int main()
{
cout<<"begin"<<endl;
int* a;
int cpt = 0;
cout<<"after init "<<a<<endl;
*a = 2;
cout<<"after assign"<<endl;
cout<<a<<" "<<*a<<endl;
cout<<"after cout"<<endl;
int* b;
*b = 2;
cout<<b<<" "<<*b<<endl;
}
输出:
begin
after init 0x7fff6c97f05e
Bus error: 10
案例二:
#include <iostream>
using namespace std;
int main()
{
cout<<"begin"<<endl;
int cpt = 0;
int* a;
cout<<"after init "<<a<<endl;
*a = 2;
cout<<"after assign"<<endl;
cout<<a<<" "<<*a<<endl;
cout<<"after cout"<<endl;
int* b;
*b = 2;
cout<<b<<" "<<*b<<endl;
}
输出:
begin
after init 0x7fff50e4ac00
after assign
0x7fff50e4ac00 2
after cout
Segmentation fault: 11
我想知道为什么声明顺序会影响错误。cpt 变量没有在任何地方使用,那么为什么它的声明会影响错误呢?
我也想知道为什么在第二种情况下指针“a”在“b”指针确实产生段错误时引用它时不会产生段错误。它们具有相同的声明和相同的用法,为什么不同?
谢谢!