找错误,一小段程序的
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;
}
我们的老师坏银让我们找这段代码的错误,有点找不到,这是什么语言?逻辑有问题吗?
[解决办法]
第一个出错处理的时候 申请的内存没有释放
[解决办法]
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是个递归函数,但它没有定义递归出口,会导致无限递归,直至程序耗尽内存或是耗光堆栈。
[解决办法]
好像没啥错误,而且也没干啥
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;}