异常处理:但不要在catch块中结束

Exception Handling : But do not end up in the catch block

本文关键字:catch 结束 异常处理      更新时间:2023-10-16

我在函数中得到一个未处理的异常。该函数被调用多次。

try {
  unsigned char* b1 = new unsigned char[Length];  //<---here
  unsigned char* b2 = new unsigned char[Length];
  //do some stuff which doesn't seem to throw an exception...then at the end
  delete[] b1;
  delete[] b2;
}
catch (...)
{
    cout<< "Error..." <<end;
 }

问题是,未处理的异常几乎是随机发生的。它在第一个语句时中断。另一个问题是:为什么这没有被发现?Visual Studio停止,我在new.cpp.

我的第三个问题是:我怎样才能找到问题?Length永远不会是一些未初始化的量;一般在512左右

看起来像<<…需要一些内存分配,但它不能这样做。将调试器配置为在抛出异常时中断执行(正如其他人建议的那样),并查看抛出的是什么以及在什么时候抛出。顺便说一句,Sutter写道,您可能根本不应该尝试捕捉内存分配异常——如果没有任何内存分配,很难完成所需的错误报告,而且这些错误很可能会失败,所以为什么要费心呢。(也许你根本不会得到这些异常——虚拟内存&交换是如此美妙的事情…)