hur.cn - 华软网

 热门搜索

一个令人崩溃的问题

  作者:未知    来源:网络    更新时间:2011/5/14
C++">


void AAA(const BYTE *&pOutBuffer ,int &nOutLength);
void BBB(BYTE *&pOutBuffer ,int &nOutLength);


void f()
{
  LPBYTE pBuffer = NULL;
  int nLen = 0;
 
  AAA(pBuffer,nLen);//在vc6下可行,在VC2008下不可行。(很古老的一段代码了,当年在VC6下很正常,移2008下就编不过了。)
  BBB(pBuffer,nLen);//在VC2008可行。 //VC6下没测试。
  
}

有人知道原因吗?



---华软 网友回答---
问题不在这些代码上,我觉得令人崩溃的是你没给那些实现代码
---华软网友回复---
vc6下类型检查不那么严格
按理说应该是warning啊
---华软网友回复---
引用 1 楼 healer_kx 的回复:
问题不在这些代码上,我觉得令人崩溃的是你没给那些实现代码。


注释都没看,白写了,哎!!!!!
---华软网友回复---
引用 2 楼 m_tornado 的回复:
vc6下类型检查不那么严格
按理说应该是warning啊


VC6下当时的情况已经记不得了。现在也没有VC6,所以没测试,直接在2008上改了。
---华软网友回复---
请我吃顿饭吧,我就告诉你.
---华软网友回复---
LPBYTE就是BYTE*,VC6的检查比较松,允许只读和非只读指相互转换,2008则不允许将只读转换为非只读。
AAA要求的是一个只读指针的引用,这表示AAA可以通过该参数返回一个只读指针,而调用者提供的是非只读的指针变量,无论AAA是否返回只读指针,调用者都可以使用该变量修改其指向的数据,容易引发问题,所以不允许这样调用。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。