今天碰到了一个关于std::bad_alloc异常的比较特别的情况,特此记录一下:
调试代码的过程中,突然抛出std::bad_alloc异常,查看堆栈,全都是运行时库和windows库的堆栈,看不出什么有用信息;
幸运的是,这个问题比较好复现,经过多次复现和打断点,发现问题出在一个消息处理函数里;
最终定位,出问题的代码如下:
char* p = new char[lDataLen]; //lDataLen = -20;
lDataLen是从其他exe中传过来的,这里传了一个负数,导致了std::bad_alloc;
之前一直都以为只有内存不足才会导致std::bad_alloc,特此记录一下。