std::bad_alloc 在使用 vector 的 push_back() 时抛出
std::bad_alloc thrown when vector's push_back() is used
在下面的代码片段中,我得到一个错误:在抛出"std::bad_alloc"的实例后调用terminatewhat():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;
主要问题似乎在注释中说明:如果Trans_t
类型的结构(不是POD)确实是使用malloc分配的(正如OP所评论的),那么整个程序的格式是错误的。
作为Trans_t::segment_list<>的构造函数从未运行过,尝试将任何内容推入其中将导致崩溃或异常。在这里,传递给标准分配器的"value size"参数很可能超过了该分配器的max_size()
(因为它本质上是垃圾),所以它在接收到它作为参数时抛出bad_alloc。
相关文章:
- 推导 std::vector::back() 的返回类型
- vector.back() 和 vector[vector.size() - 1] 之间的区别?
- vector.push_back(vector.back()+1) 是未定义的行为吗?
- C++自己的对象堆栈.在 push() 上复制了什么?
- C++ push() 和 pop() 方法使用指针的动态 LinkedList 的问题
- 如何像在javascript中一样"push" c ++映射
- 线路抑制状态错误 C4703 可能未初始化的局部指针变量"back"已使用
- std::vector using back(), pop_back(), push_back(), 得到'double free or corruption'错误
- vector.back()和vector.end()有什么区别
- 列表大小为 1,但 front() 和 back() 不相等
- 返回C++中没有 back() 方法的容器的最后一个元素?
- 在非空 std::list 上使用 std::list.back<int>() 时"Segmentation Fault"
- 模板堆栈类的复制构造函数中的 pop() 和 push() 不起作用
- 我们可以使用Back() - 值索引在其上执行向量插入
- 当我运行以下代码添加str.front() str.back时,它给了我200个,但为什么
- push(ing)back在循环中对象指针
- 在 C++ 中将元素添加到空向量:为什么 push.back 有效而 [] 无效
- 我似乎无法让 v.push.back() 处理字符串
- String::push_back() does not push back
- 向量resize(), push.back(), reserve()方法