psa zzz = new sa;
怎么能这样??
psa *zzz = new sa;
怎么能这样??
psa *zzz = new sa;
解决方案 »
- 如何在VC资源管理器用快捷键选中各种控件?
- 求 基于一阶导数图像增强 的源代码
- 使用cimg.h在VC2008下可运行但VC6报错,两个错误一直无法排除
- 显示jpg 但是闪屏
- 关于拆分窗口的编程
- 最近坛子很闷, 期待中...
- 为什么有些类的构造函数要被设计成保护类型的?
- 打开一个别人的VC60工程DLL,Project->Set中的页标鉴,有一项是library, 别的工程是DLL,请问两者有什么区别啊?
- dll中调用对话框,出现Debug Assertion Failed????
- case语句的每个分支后可以有多条语句吗?
- 请问如何在SDK程序中调用MFC的类?
- 到底怎么处理VC异常呀?我用try catch用debug方式错误对话框照弹不误用release干脆出错退出
typedef struct
{
DWORD aaa[2];
DWORD bbb[2];
}sa, *psa;
应该是堆栈溢出,如果在程序里多次重入引起死循环,会用尽堆栈的内存,最后剩些内存碎片,会造成new失败...
但是,我得到的结果是死循环,没有报告错误
Windows98,VC++ 6.0,默认设置
{
// CreateThread(NULL, 0, ct, NULL, 0, NULL); // 将它去掉
while (1)
{
psa zzz = new sa;
delete zzz;
}
return
但
CreateThread(NULL, 0, ct, NULL, 0, NULL);
失败了
CreateThread(NULL, 0, ct, NULL, 0, NULL); win9x:
DWORD dwThreadID;
CreateThread(NULL, 0, ct, NULL, 0, &dwThreadID);
用
CreateThread(NULL, 0, ct, NULL, 0, &dwThreadID);
出错了.
是
CreateThread(NULL, 0, ct, NULL, 0, &dwThreadID);
导致的错误.
我刚在VC上做了测试,发现了问题的所在:
工程设置里面,C/C++,Category的Code Generation的Use runtime library选项
有单线程和多线程的设置,Console程序的缺省是单线程,运行你的程序,就会出错。
改成多线程,就没事儿了。C++的new 和 delete是要靠运行库来支持的,VC的运行库是分单线程和多线程的,这应该就是问题所在了:)平常写Consle程序的时候,别忘了缺省设置是单线程,必要时要改过来:)