在下面的代码片段中,我收到一条错误消息: 在抛出' 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;
答案 0 :(得分:0)
主要问题似乎在评论中说明:如果确实使用malloc(作为OP评论)分配了类型Trans_t
(不是POD)的结构,那么整个程序就会格式错误。
作为Trans_t :: segment_list&lt;&gt;的构造函数从来没有运行,试图将任何东西都推进它会导致崩溃或异常。在这里,传递给标准分配器的“value size”参数很可能超过该分配器的max_size()
(因为它实际上是垃圾进入),所以它在接收到它作为参数时抛出bad_alloc。