小弟我这样的代码有有关问题
我这样的代码有问题?在线等C/C++ codeLPBYTE GetBuff(){BYTE bBufRet[MAX_PACKAGE_NAME]RtlZeroMemory(&b
我这样的代码有问题?在线等
C/C++ codeLPBYTE 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释放,然后初始化指针。
[解决办法]这个代码肯定不行,你的确可能正确读出值,但很不可靠,