首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

找异常,一小段程序的

2012-04-16 
找错误,一小段程序的HRESULT DoWork(size_t,nSize){char *pnew char[nSize]if(!p)return E_FAILLif(DoM

找错误,一小段程序的
HRESULT DoWork(size_t,nSize)
{
  char *p=new char[nSize];
  if(!p)return E_FAILL;
  if(DoMoreWork(p,nSize)!=S_OK)
  {
  return E_FAIL;//Error,so ball out!
  }
  //打印从函数DoMoreWork()返回变量p的值
  PrintOutPut(p,nSize);
  //释放内存
  {
  delete []p;
  p=NULL;
  }
return S_OK;
}
我们的老师坏银让我们找这段代码的错误,有点找不到,这是什么语言?逻辑有问题吗?

[解决办法]
第一个出错处理的时候 申请的内存没有释放
[解决办法]

C/C++ code
HRESULT DoWork(size_t,nSize){  char *p=new char[nSize];  if(!p)  return E_FAILL;  if(DoMoreWork(p,nSize)!=S_OK)  {       //return E_FAIL;//Error,so ball out! 错位在这,如果失败,就直接退出了,是不对的。       goto: Release;  }  //打印从函数DoMoreWork()返回变量p的值  PrintOutPut(p,nSize);Release:  //释放内存  {         delete []p;          p=NULL;  }return S_OK;}
[解决办法]
DoWork是个递归函数,但它没有定义递归出口,会导致无限递归,直至程序耗尽内存或是耗光堆栈。
[解决办法]
好像没啥错误,而且也没干啥
C/C++ code
HRESULT DoWork(size_t,nSize){  char *p=new char[nSize];  if(!p)return E_FAILL;  if(DoMoreWork(p,nSize)!=S_OK)  {  delete []p;  p=NULL;  return E_FAIL;//Error,so ball out!  }  //打印从函数DoMoreWork()返回变量p的值  PrintOutPut(p,nSize);  //释放内存  {  delete []p;  p=NULL;  }return S_OK;} 

热点排行