Getter 返回段错误

Getter returning SegFault

想象一下 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() 方法会出现段错误?!不使用相同 class 的其他方法是没有任何意义的。 如果需要,我还可以为 Github 上的真实项目提供 link。但我还不想说到那个地步。

有没有人遇到过同样的问题?这不是定义错误或其他任何问题,因为我在 Load() 方法上对其进行了测试。

如果在调用 DoSomething() 之前为 size 赋值,则不会出现段错误。

Live on Coliru.

Here 是一个在 GCC 上编译和运行的最小更改(包括简单的零初始化)的示例。

Level l{};
l.DoSomething();