我创建了一个结构来保存一些数据,然后声明一个向量来保存该结构。向量上的段错误<struct>
但是,当我做一个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*/
};
本来,结构并没有复制,构造函数和析构函数。当我在下面阅读这篇文章时我加了后者。
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机器上。我编译它与海湾合作委员会3.4.5 mingw没有任何问题...
帮助!
--- ... ---
:::编辑:::
我推数据
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);
证明推动它请的代码。 – 2010-04-29 17:20:17
你的struct dos不需要拷贝构造函数,并且提供它不是个好主意 - 默认的拷贝构造函数完成你所需要的一切。你也不需要结构上的typedef。它也不需要析构函数,也可能不需要构造函数。 – 2010-04-29 17:22:14
@Neil。我知道!我把它们加入了“绝望” – 2010-04-29 17:28:41