Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 吸气剂返回故障_C++_Segmentation Fault_Getter - Fatal编程技术网

C++ 吸气剂返回故障

C++ 吸气剂返回故障,c++,segmentation-fault,getter,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

在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!!!
}
int-Level::GetSize(){
返回大小;
}
整数级别::设置大小(整数大小){
大小=\u大小
}
int-Level::Load(字符串str,int\u大小){
SetSize(_size);//工作正常!

cout如果在调用
DoSomething()
之前为
size
赋值,则不会得到segfault

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

Level l{};
l.DoSomething();

到目前为止看起来还不错(除了缺少一个
)。但是,我看不到任何保证将大小设置为某个值?除此之外,我认为缺少一些实际导致segfault的代码。注意:您还缺少
a_预定义的\u 2d_数组的定义。
。如果您可以发布一个。变量“size”的值是多少在发生异常时?我想一定是一些垃圾值。你是谁来定义什么是重要的部分?你不确定是什么导致了它。我关注的是真正的问题,你的大小保证在哪里设置正确?使用unsigned作为内存大小绝对是防止垃圾大小的一个很好的实践。@veda sounds似是而非。@Pavlos你在用什么编译器?我问是因为它真的不应该这样编译。而且
Class
不是关键字,
Class
是,所以这也让人困惑…有趣。我不知道使用
{}
将默认初始化成员变量,而不使用它将使它们处于未初始化状态。感谢您抽出时间。请花些时间看看我在github上的代码。我在说明中提供了这些代码。我已添加了有关问题信息文件说明的注释,以指导您。@R2退出队列我可以再问您一个问题吗?我可以这样与您联系吗我如何通过电子邮件或其他方式回答?@Pavlos如果它很短,我可能可以在这里回答,或者你可以提出一个新问题。你永远不知道,其他人可能会发现这个答案在这条路上很有帮助。@caps OCD=>是的。检查标准第8.5小节中的初始值设定项。在这种情况下,大括号意味着列表初始化=>值初始化(8.5.4/3,第二个列表项)=>零初始化(8.5/8,第二个列表项)。当未提供初始值设定项(
T name;
)时,默认初始化将执行8.5/12,在本例中也是如此)为成员提供不确定的值。但是,如果实现愿意,可以决定将其归零,这将使所有操作都相同。对详细信息进行了总结。是的,但在调用Load方法()时会添加一个值,我在执行某些操作之前会这样做