Getter returning SegFault

Getter returning SegFault

本文关键字:SegFault returning Getter      更新时间:2023-10-16

想象这在关卡中。hh文件:

Class Level {
private:
    int size;
    float** a_predefined_2d_array;
public:
    int GetSize();
    int SetSize(int);
    int DoSomething();
    int Load(string, int);
};

想象这在关卡中。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()方法上测试了它。

下面是一个在GCC上编译和运行的示例,修改很小(包括简单的零初始化)。

Level l{};
l.DoSomething();

如果在调用DoSomething()之前给size赋值,则不会得到段错误。

Live on Coliru.