使用vector' s push_back()时抛出std :: bad_alloc

时间:2014-04-15 08:31:32

标签: c++

在下面的代码片段中,我收到一条错误消息: 在抛出' std :: bad_alloc'的实例后终止调用   what():std :: bad_alloc 中止(核心倾销)

这发生在push_back()指令中。可能是什么原因?错误在第一次迭代中看到,所以我认为这不是因为程序过度使用了内存。我可能会忽略一些非常愚蠢的事情。请告诉我!

for(i=0; i<numsegs; i++){
    for(j=0;j<rvm->number_segs; j++){
        if(segbases[i] == rvm->segment_list[j]->ext_data_seg){
            transaction->rvm = rvm;
            transaction->tid = trans_count++;
            transaction->number_regs = 0;
            transaction->number_segs++;
            rvm->segment_list[j]->modified = 1;
            temp_seg = rvm->segment_list[j];                           
            transaction->segment_list.push_back(temp_seg);
        }
    }

}

循环最初以numsegs = rvm-&gt; number_segs = 1

运行

编辑: 交易结构是:

struct Trans_t{
    int tid;
    rvm_t rvm;
    int number_segs;
    int number_regs;
    vector <segment*> segment_list;
    vector <region*> region_list;   
};
typedef struct Trans_t* trans_t;

1 个答案:

答案 0 :(得分:0)

主要问题似乎在评论中说明:如果确实使用malloc(作为OP评论)分配了类型Trans_t(不是POD)的结构,那么整个程序就会格式错误。

作为Trans_t :: segment_list&lt;&gt;的构造函数从来没有运行,试图将任何东西都推进它会导致崩溃或异常。在这里,传递给标准分配器的“value size”参数很可能超过该分配器的max_size()(因为它实际上是垃圾进入),所以它在接收到它作为参数时抛出bad_alloc。