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

小弟我这样的代码有有关问题

2014-05-25 
我这样的代码有问题?在线等C/C++ codeLPBYTE GetBuff(){BYTE bBufRet[MAX_PACKAGE_NAME]RtlZeroMemory(&b

我这样的代码有问题?在线等

C/C++ code
LPBYTE GetBuff(){   BYTE bBufRet[MAX_PACKAGE_NAME];   RtlZeroMemory(&bBufRet,sizeof(bBufRet));   LPBYTE  lpbBuff=NULL;   LPBYTE  lpbHead=NULL;   lpbBuff=bBufRet;   lpbHead=bBufRet;   //....    给BufRet 赋值   //...   return lpbhead}

然后
在另外的一个方法中调用

LPBYTE lpBuff=GetBuff()
请问 我这个代码有什么问题?

我通过测试我可以得到我的bBufRet的值啊
求指点谢谢。


[解决办法]
出了这个函数,你那个地址就无效了
[解决办法]
你需要从对上分配内存,C++用new,C用malloc

看一下堆和栈的区别就知道了
[解决办法]
1,RtlZeroMemory(&bBufRet,sizeof(bBufRet));最好改成:
RtlZeroMemory(bBufRet,sizeof(bBufRet)); 去掉&符号

2,返回的lpbhead地址的生存周期问题.
[解决办法]
bBufRet[MAX_PACKAGE_NAME]; 的空间在函数栈空间里,随着函数返回此空间被释放,可以被别人使用

返回的地址虽然仍然存在,但是指向的空间已经释放,所以类似野指针。

解决办法,将bBufRet,空间申请到堆空间内,使用完成后,调用FREE释放,然后初始化指针。
[解决办法]
这个代码肯定不行,你的确可能正确读出值,但很不可靠,

热点排行