我創建了一個結構來保存一些數據,然後聲明一個向量來保存該結構。向量上的段錯誤<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