hur.cn - 华软网

 热门搜索

关于MFC中CMemoryException的困惑

  作者:未知    来源:网络    更新时间:2011/4/17
  据我所知,MFC涉及内存分配的地方都有可能抛CMemoryException,比如CString。
  现在我的项目中,有一些代码类似这样:
  EnterCriticalSection();
  CString ss;
  ss = _T("xxxxx");//此处有可能抛出异常,致使临界区没法释放
  LeaveCriticalSection();

  遇到这类情况,都要做try catch捕捉吗?如果捕捉的话,那岂不是程序中绝大部份都要捕捉。。。汗
---华软 网友回答---
有异常的时候,
尽量用MFC的Class,而不是用这些API,例如:
EnterCriticalSection();


你能够用

class CCriticalSection

---华软网友回复---
引用 1 楼 healer_kx 的回复:
有异常的时候,
尽量用MFC的Class,而不是用这些API,例如:
EnterCriticalSection();


你能够用

class CCriticalSection


我那个只是举个例子,用MFC的类(CMutex CSemaphore)能够防止该问题?
---华软网友回复---
我也是举个例子,你能够试一试,看看会不会释放临界区。
---华软网友回复---
 EnterCriticalSection();
  CString ss;
  ss = _T("xxxxx");//此处有可能抛出异常,致使临界区没法释放
  LeaveCriticalSection();

楼主你真逗

如果 这时抛出异常了  很明显  XXXXXX 占用6个字节  
系统连6个字节的内存都没了..
你也捕捉不了了.基本没内存了.....
6个字节的内存没了  你程序基本就死了. 还谈什么捕捉异常啊..
你想弹出一个MessageBox 说捕捉异常了 都弹不出来了 MessageBox 也不止6个字节吧.

你懂的.
CString  不会失利的 相信我吧. 等他失利了 系统也崩了 2012 也来了  火星人也来了
---华软网友回复---
记住  就好比

char *p = new char[100];

基本不用判断 p 是否为空..

如果连 100个字节都开辟不了  你程序基本就不可能运行起来. 系统也早就蹦了.

这是操作系统的事  操作系统连100 字节都不给你  他何须让你运行呢
---华软网友回复---
引用楼主 kyokof 的回复:
据我所知,MFC涉及内存分配的地方都有可能抛CMemoryException,比如CString。
  现在我的项目中,有一些代码类似这样:
  EnterCriticalSection();
  CString ss;
  ss = _T("xxxxx");//此处有可能抛出异常,致使临界区没法释放
  LeaveCriticalSection();

  遇到这类情况,都要做tr……

要是多线程的话,你这样写...
ss创建过了,你再去创建,不报错才有鬼

---华软网友回复---
引用 5 楼 wobushihazi 的回复:
记住 就好比

char *p = new char[100];

基本不用判断 p 是否为空..

如果连 100个字节都开辟不了 你程序基本就不可能运行起来. 系统也早就蹦了.

这是操作系统的事 操作系统连100 字节都不给你 他何须让你运行呢

如果 new 分配内存失利,默许是抛出异常的,按c++规范的话,new失利会抛出bad_alloc异常,然则有些编译器对c++规范支持不是很好,比如VC 6.0中new失利不会抛出异常,而前往0.
---华软网友回复---
这样的的操作是不会出现内存不够的,相信系统会给你足够的内存。只需你不是不停的开辟,而不释放。
ss = _T("xxxxx");//没有问题
---华软网友回复---
引用 6 楼 tr0j4n 的回复:
要是多线程的话,你这样写...
ss创建过了,你再去创建,不报错才有鬼


怎么个报错法,详细说说看      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。