【发布时间】:2014-05-29 11:49:42
【问题描述】:
在下面的 sn-p 代码中,我收到一条错误消息: 在抛出 'std::bad_alloc' 的实例后调用终止 什么():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->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;
【问题讨论】:
-
transaction的类型是什么?向我们展示该类型的定义。 -
我刚刚更新了我的帖子。交易的类型是 trans_t
-
你如何定义
transaction?你为它分配内存吗? -
是的。定义为:trans_t transaction = (trans_t)malloc(sizeof(trans_t));
-
您不应该混合使用 C 和 C++。如果您真的想使用指针,请使用
trans_t transaction = new trans_t;而不是trans_t transaction = (trans_t)malloc(sizeof(trans_t))。但我不确定这里是否需要指针……现代 C++ 旨在避免手动内存管理。
标签: c++