我创建了一个结构来保存一些数据,然后声明一个向量来保存该结构。
但是当我执行 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*/
};
最初,结构体没有副本、构造函数或析构函数。当我阅读下面这篇文章时,我后来添加了它们。
将项目推送到 STL 容器后出现段错误 https://stackoverflow.com/questions/676575/seg-fault-after-is-item-pushed-onto-stl-container
但最终结果是一样的。
有一个问题让我非常烦恼!当我第一次将一些数据推入向量时,一切都很顺利。后来在代码中,当我尝试将更多数据推送到向量中时,我的应用程序出现了段错误!
向量已声明
vector<Group> Groups
是我使用它的文件的全局变量。其他地方没有外部人员,等等......
我可以将错误追溯到:
_M_deallocate(this->_M_impl._M_start, this->_M_impl._M_end_of_storage- this->_M_impl._M_start);
在 vector.tcc 中,当我完成将最后一个元素添加/复制到向量时......
据我所知。我不需要与复制构造函数有任何关系,因为浅复制应该足以满足此目的。我什至没有分配任何空间(但我为字符串保留了空间以供尝试)。
我不知道问题是什么!
我在 OpenSuse 10.2 上使用 gcc 4.1.2 运行此代码
由于向后兼容性问题,我不太急于升级 gcc...
这段代码在我的 Windows 机器上“完美”运行。我用 gcc 3.4.5 mingw 编译它没有任何问题......
help!
--- ... ---
:::编辑:::
我推送数据
Group tmp_grp;
(...)
tmp_grp.name = "Nova ";
tmp_grp.codigo=GetGroupnextcode();
tmp_grp.deleted=0;
tmp_grp.printers=0;
tmp_grp.subpage=0;
Groups.push_back(tmp_grp);