Max*_*Max 1 c++ segmentation-fault
我的程序有一个类,其中包含一个Level名为的对象向量levels.在成员函数中有这一行:
levels.push_back(level::Level());
Run Code Online (Sandbox Code Playgroud)
我今天对我的程序做了一些更改,这行代码开始了segfaulting:
0x0804d248 in void std::vector<yarl::level::Level, std::allocator<yarl::level::Level> >::emplace_back<yarl::level::Level>(yarl::level::Level&&) (this=0x0,
__args#0=...) at /usr/include/c++/4.4/bits/vector.tcc:93
93 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
Run Code Online (Sandbox Code Playgroud)
我认为Level对象可能以某种方式变得腐败,所以我在函数调用之外声明它,所以我可以在gdb中检查它,如下所示:
level::Level foo();
levels.push_back(foo);
Run Code Online (Sandbox Code Playgroud)
原来这不编译.它g ++给出了我以前没见过的两个错误:
error: invalid conversion from 'level::Level (*)()' to 'int'
error: initializing argument 1 of 'level::Level::Level(int, int, int)'
Run Code Online (Sandbox Code Playgroud)
现在,Level构造函数接受三个整数参数,每个参数都有默认值.我以为它可能一直在抱怨我没有传递这三个参数,即使它们有默认值,所以我更改了第一行以传递默认值:
level::Level foo(1, 100, 100);
Run Code Online (Sandbox Code Playgroud)
这现在编译,但仍然是段错误,但在不同的地方(尽管是相同的测试)这样做:
0x0804c699 in std::vector<yarl::level::Level, std::allocator<yarl::level::Level> >::push_back (this=0x0, __x=...) at /usr/include/c++/4.4/bits/stl_vector.h:735
735 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)
Run Code Online (Sandbox Code Playgroud)
我意识到这个代码太少,不能指望你们能够解决我的问题,但也许有人可以告诉我更多关于这些错误的含义?特别是那些g ++错误; 我不知道为什么它不会接受一个空的Level构造函数,因为它的所有参数都是默认的,我不知道(*)()错误的部分是什么意思(它使得错误对谷歌来说非常令人沮丧).
至少有一个错误非常简单.这个:
level::Level foo();
Run Code Online (Sandbox Code Playgroud)
在C++中是一个相当常见的错误,被称为最令人烦恼的解析.您没有声明具有名称foo和类型的变量level::Level,您正在声明具有该名称的函数和不带参数的返回类型.删除括号以声明变量
您的其他调用失败,因为(如堆栈跟踪中所示)this为NULL,但对我来说并不明白为什么会这样,特别是因为您似乎在堆栈变量而不是指针上运行
| 归档时间: |
|
| 查看次数: |
2319 次 |
| 最近记录: |