因为vector得到f(-1)
的长无符号int调用抛出bad_alloc
。我怀疑用2147483648打电话,实际上是18446744073709551615,因为它是x64系统。如何获取有关错误详细信息的信息?这可能是一般化的,我如何获得比e.what()
更多的详细信息?
void f(int i){
vector<int> v(i);
printf("vector size: %d", v.size());
}
int main(int argc, char** argv) {
//f(1); // vector size: 1
try{
f(-1); // terminate called after throwing an instance of 'std::bad_alloc'
//what(): std::bad_alloc
}catch(std::bad_alloc& e){
printf("tried to allocate: %d bytes in vector constructor", e.?);
}
return 0;
}
答案 0 :(得分:3)
就标准而言,除了what()
提供的内容之外,没有其他信息(其内容,顺便说一下,留待实施)。
你可以做的是向vector
提供你自己的分配器,它会抛出一个派生自bad_alloc
的类,但是它也会指定你在捕获它时要检索的信息(例如内存量)必需的)。
答案 1 :(得分:1)
#include <vector>
#include <iostream>
template <typename T>
std::vector<T> make_vector(typename std::vector<T>::size_type size, const T init = T()) {
try {
return std::vector<T>(size, init);
}
catch (const std::bad_alloc) {
std::cerr << "Failed to allocate: " << size << std::endl;
throw;
}
}
int main()
{
make_vector<int>(std::size_t(-1));
return 0;
}
保留而不是初始化可能更适合。 请复制省略/返回值优化并记住。