Getter返回SegFault

时间:2015-08-14 16:10:44

标签: c++ segmentation-fault getter

想象一下这个在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()方法上测试了它。

2 个答案:

答案 0 :(得分:2)

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

Level l{};
l.DoSomething();

答案 1 :(得分:0)

如果您在致电size之前为DoSomething()分配了值,则不会出现段错误。

Live on Coliru.