相关疑难解决方法(0)

在vector <struct>上的segfault

我创建了一个结构来保存一些数据,然后声明一个向量来保存该结构.

但是当我做一个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或析构函数.当我在下面阅读这篇文章时,我添加了它们.

将物品推入STL容器后的段故障

但最终结果是一样的.

这有一个困扰我的地狱!当我第一次将一些数据推入向量时,一切都很顺利.稍后在代码中,当我尝试将更多数据推入向量时,我的应用程序只是段错误!

向量被声明

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编译它没有任何问题...

救命!

--- ...... …

c++ linux struct vector

7
推荐指数
2
解决办法
2355
查看次数

标签 统计

c++ ×1

linux ×1

struct ×1

vector ×1