初始化和填充向量时bad_alloc
bad_alloc while initializing and filling a vector?
在尝试生成随机数向量时,我偶然发现了一个std::bad_alloc错误。这是我的代码:
#include "search.h"
#include "gtest/gtest.h"
int _size = 100;
std::vector<int> GetSortedVector(int size){
//init vector
std::vector<int> v(size);
//fill with random numbers
for (std::vector<int>::size_type i=0; i < v.size(); i++)
v.push_back( std::rand()%(2*size) );
//return the setup vector
return v;
}
//triggered automatically
TEST(BinarySearch, NonUniqueSorted){
std::vector<int> v = GetSortedVector(_size);//nothing moves farther than this line
}
PS:我现在确实使用generate()
,但仍然很好奇为什么它失败了。
v.push_back
会增加大小,因此i<v.size()
永远不会false
。
由于您的矢量长度已经size
,因此您需要用
for (std::vector<int>::size_type i=0; i < v.size(); i++)
v[i] = std::rand()%(2*size);
或改用reserve
:
std::vector<int> v;
v.reserve(size);
保持push_back
并检查size
。我不会建议std::generate
因为你说你已经这样做了。
放大到以下部分:
for (std::vector<int>::size_type i=0; i < v.size(); i++)
v.push_back( std::rand()%(2*size) );
每次调用push_back()
时,向量的大小都会增加 1。因此,i < v.size()
永远不会计算为 false,并且您的循环将继续,直到内存不足。修复它的可能方法之一是捕获size()
一次,例如:
for (std::vector<int>::size_type i=0, s = v.size(); i < s; i++)
v.push_back( std::rand()%(2*size) );
相关文章:
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 组件对象模型 (COM):IMalloc::Alloc 在哪里分配内存?
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- 为什么 GetSystemMetrics (SM_CXVIRTUALSCREEN) 返回'bad'值?
- 将 lambda 传递给 STL 集时出错"bad function call"
- 新的 C++14 位分隔符处"Bad Character" Eclipse Oxygen 错误
- 使用 #define 被认为是"bad practice"吗?
- "400 Bad request"使用 OpenSSL BIO 进行请求时
- CGAL:Hausdorff距离不良Alloc
- 解密文件AES_256_CBC返回"bad decrypt"错误
- 在C++流中,eof(),fail(),bad()和good()有什么区别
- C STD ::初始化类对象中的Alloc错误错误
- make / gcc:"bad build"的可能原因是什么?
- 什么是地址0xbaddc0dedeadbead "Bad decode dead bead"
- 在多线程环境中,什么可能导致"bad file descriptor"?
- 尝试解决HackerBank上的BFS挑战时出现错误的alloc异常
- "std::vector"在调整大小时引发"bad allocation"异常
- 尝试使用 execp、dup2 和管道实现 shell,挂起或"bad file descriptor"