我创建了一个结构来保存一些数据,然后声明一个向量来保存该结构.
但是当我做一个push_back时,我得到该死的段错误,我不知道为什么!
我的结构定义为:
typedef struct Group
{
int codigo;
string name;
int deleted;
int printers;
int subpage;
/*included this when it started segfaulting*/
Group(){ name.reserve(MAX_PRODUCT_LONG_NAME); }
~Group(){ name.clear(); }
Group(const Group &b)
{
codigo = b.codigo;
name = b.name;
deleted = b.deleted;
printers = b.printers;
subpage = b.subpage;
}
/*end of new stuff*/
};
Run Code Online (Sandbox Code Playgroud)
最初,struct没有copy,constructor或析构函数.当我在下面阅读这篇文章时,我添加了它们.
但最终结果是一样的.
这有一个困扰我的地狱!当我第一次将一些数据推入向量时,一切都很顺利.稍后在代码中,当我尝试将更多数据推入向量时,我的应用程序只是段错误!
向量被声明
vector<Group> Groups
Run Code Online (Sandbox Code Playgroud)
并且是我正在使用它的文件的全局变量.其他任何地方都没有外出等等......
我可以将错误追踪到:
_M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage- this->_M_impl._M_start);
Run Code Online (Sandbox Code Playgroud)
在vector.tcc中,当我完成添加/复制最后一个元素到向量....
据我所知.我不需要与复制构造函数有任何关系,因为浅拷贝应该足够了.我甚至没有分配任何空间(但我为字符串做了预备尝试).
我不知道问题是什么!
我在使用gcc 4.1.2的OpenSuse 10.2上运行此代码
由于向后兼容性问题,我真的不急于升级gcc ...
这段代码在我的Windows机器上"完美"运行.我用gcc 3.4.5 mingw编译它没有任何问题...
救命!
--- ...... …