我有这段代码可以按预期编译和工作:
#include <iostream>
using namespace std;
int fun(int* p){
*p = 20;
return 1;
}
int main(){
int* number;
*number =10;
cout << "before: "<<*number<<endl;
fun(number);
cout << "after: "<<*number<<endl;
return 1;
}
虽然下面的给出了段错误:
#include <iostream>
using namespace std;
int fun(int* p){
*p = 20;
return 1;
}
int main(){
int test=1; //ADDITION
int* number;
*number =10;
cout << "before: "<<*number<<endl;
fun(number);
cout << "after: "<<*number<<endl;
return 1;
}
我正在使用 g++ test.cpp -o test
进行编译
谁能解释一下这种行为是从哪里来的?
最佳答案
number
未指向 main()
中的有效内存位置。只是程序声明了一个指针,number
,它可以保存一个整数类型的地址。但是,它没有分配/初始化以指向任何整数的位置。
int* number = new int;
*number = 10;
由于程序正在管理资源,它应该使用delete
返回这些资源。
delete number;
如果幸运的话,这两个程序都会出现段错误。
关于c++ - 段错误 : Why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5315073/