想象一下这个在level.hh文件中:
Class Level {
private:
int size;
float** a_predefined_2d_array;
public:
int GetSize();
int SetSize(int);
int DoSomething();
int Load(string, int);
};
想象一下在level.cc文件中:
int Level::GetSize() {
return size;
}
int Level::SetSize(int _size) {
size = _size
}
int Level::Load(string str, int _size) {
SetSize(_size); //works fine!
cout<<GetSize()<<endl; //works fine!
//basically loads everything to initiliaze the program. The point is that the above calls work fine!
}
//The problem is here!!!
int Level::DoSomething() {
a_predefined_2d_array = new float*[GetSize()]; //SEG FAULTS!!!
cout<<"size = "<<GetSize()<<endl; //SEG FAULTS!!!
}
为什么GetSize()方法会出现段错误?!如果不对同一类的其他方法起作用,那就没有任何意义。 如果需要,我还可以提供Github上真实项目的链接。但我现在还不想达到这一点。
以前有人遇到过同样的问题吗?这不是错误的定义或任何问题,因为我在Load()方法上测试了它。
答案 0 :(得分:2)
Here是一个在GCC上编译和运行的最小变化(包括简单的零初始化)的示例。
Level l{};
l.DoSomething();
答案 1 :(得分:0)
如果您在致电size
之前为DoSomething()
分配了值,则不会出现段错误。