关于 set_new_handler的总结
来源:互联网 发布:上海艾诺科软件 编辑:程序博客网 时间:2024/05/22 15:33
当运算符new找不到足够大的连续内存块来为对象分配内存时将会发生什么?一个称为 new-handler的函数被调用。
对于new-handler的缺省动作是抛出一个异常。然而,如果我们在程序里用堆分配,至少要用“内存已用完”的信息代替 new-handler,并异常中断程序。用这个办法,在调试程序时会得到程序出错的线索。
例子
void noMemory()
{
printf("no enough memory");
}
int main(int argc, char* argv[])
{
printf("Hello World!\n");
set_new_handler(noMemory);
int *pTest = new int[1000000000];
return 0;
}
使用set_new_handler()时候,在VC6中出现如下错误提示:
错误提示:Assertion failed: new_p == 0, file setnewh.cpp, line 52
原因:VC6没有实现C++标准要求的 set_new_handler(),即在VC6中不能使用set_new_handler()。VC6建议使用 <new.h> 的 _set_new_handler()。为了防止你使用 set_new_handler(),VC6在<setnewh.cpp> 的set_new_handler() 中插入了一行 assert(new_p == 0);。
在VC6以后的版本(如.NET)中就可以正常使用C++标准规定的 set_new_handler()了。
解决方法:将set_new_handler()换成 _set_new_handler()。将回调函数声明类型修改为int __cdecl noMemory(unsigned int anc)
- 关于 set_new_handler的总结
- 关于 set_new_handler的总结
- 关于set_new_handler
- 关于set_new_handler
- 关于set_new_handler
- 关于set_new_handler
- set_new_handler()总结
- 关于set_new_handler的一些残存疑问
- 学习中遇到的问题-关于set_new_handler()
- 关于set_new_handler(转载)
- 关于set_new_handler(转载)
- 关于set_new_handler(转载)
- 关于set_new_handler(转载)
- 关于set_new_handler(转载)
- 关于在vc6.0中使用set_new_handler的问题
- 《STL源码剖析》中关于set_new_handler的理解
- set_new_handler
- set_new_handler
- Win7下启用Telnet方法
- Socket网络编程(备忘)
- 驱动中区分 win8 的 fast startup 与普通的 cold startup
- picec of code
- cookies和session的概念
- 关于 set_new_handler的总结
- C#调用汇编dll
- C语言插件机制(上) -- linux动态库
- 解决msys和MinGW中文乱码以及输入中文问题
- shell@android: 怎么切到root
- linux字符设备文件的打开操作
- 走在CentOS的路上(持续更新)
- javascript基础二JavaScript DOM编程
- HTTP协议的C语言编程实现实例