关于数组传值的问题

twtpdc 2003-03-24 09:48:18
请高手看一下
BOOL CSerialCom::ReadByte(BYTE* resp)
{
BYTE rx[10]={0,0,0,0,0,0,0,0,0,0};
DWORD dwBytesTransferred=10;
if (ReadFile(hComm, rx, 10, &dwBytesTransferred, 0))
{
if (dwBytesTransferred == 10)
{
resp=rx;
CString a;
a.Format("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",rx[0],rx[1],rx[2],rx[3],rx[4],rx[5],rx[6],rx[7],rx[8],rx[9]);
AfxMessageBox(a);
return true;
}

}

return false;
}
//下一段为对上面函数的引用。
BYTE lpGetData[10]={0,0,0,0,0,0,0,0,0,0};
BOOL bReadByte=FALSE;
do{
bReadByte=port.ReadByte(lpGetData);
CString a;
a.Format("发送成功否%d\n",bReadByte);
TRACE(a);
}while(!bReadByte);
结果显示lpGetData并未被赋值。
但上ReadFile()中的AfxMessageBox(a)显示得出了正确的值。
怎么通过数组传值?
...全文
50 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Phourm 2003-03-24
  • 打赏
  • 举报
回复
sorry
忘了delete[] pGetData ;
Phourm 2003-03-24
  • 打赏
  • 举报
回复
或者
BOOL CSerialCom::ReadByte(BYTE** resp)
{
//BYTE rx[10]={0,0,0,0,0,0,0,0,0,0};
if (resp == NULL)return FALSE;
*resp = new BYTE[10];
DWORD dwBytesTransferred=10;
if (ReadFile(hComm, *resp, 10, &dwBytesTransferred, 0))
{
if (dwBytesTransferred == 10)
{
//resp=rx;
CString a;
a.Format("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",(*resp)[0],(*resp)[1],(*resp)[2],(*resp)[3],(*resp)[4],(*resp)[5],(*resp)[6],(*resp)[7],(*resp)[8],(*resp)[9]);
AfxMessageBox(a);
return true;
}

}

return false;
}
//下一段为对上面函数的引用。
BYTE *pGetData = NULL;
BOOL bReadByte=FALSE;
do{
bReadByte=port.ReadByte(&pGetData);
CString a;
a.Format("发送成功否%d\n",bReadByte);
TRACE(a);
}while(!bReadByte);
Phourm 2003-03-24
  • 打赏
  • 举报
回复
BOOL CSerialCom::ReadByte(BYTE* resp)
{
BYTE rx[10]={0,0,0,0,0,0,0,0,0,0};
DWORD dwBytesTransferred=10;
if (ReadFile(hComm, rx, 10, &dwBytesTransferred, 0))
{
if (dwBytesTransferred == 10)
{
//resp=rx;
CString a;
a.Format("%d,%d,%d,%d,%d,%d,%d,%d,%d,%d",rx[0],rx[1],rx[2],rx[3],rx[4],rx[5],rx[6],rx[7],rx[8],rx[9]);
AfxMessageBox(a);
memcpy(resp, rx, sizeof(rx));//add by Phourm
return true;
}

}

return false;
}
twtpdc 2003-03-24
  • 打赏
  • 举报
回复
楼上兄弟:
怎么办呢?
BinaryTreeEx 2003-03-24
  • 打赏
  • 举报
回复
StarCraftII(Show me the money) 说的是对的,但是有一个小问题。
rx不是成员变量,是CSerialCom::ReadByte的局部变量。局部变量的
存储空间在函数内部被分配,函数返回后就被释放。
twtpdc 2003-03-24
  • 打赏
  • 举报
回复
resp为函数的参数呀!
hanwg 2003-03-24
  • 打赏
  • 举报
回复
到底是rx还是resp为函数参数?好象程序有点问题?
twtpdc 2003-03-24
  • 打赏
  • 举报
回复
楼上兄弟:
怎么办呢?
StarCraftII 2003-03-24
  • 打赏
  • 举报
回复
个人理解:
rx为函数的成员变量,当ReadByte函数返回之后,rx被释放。这样在函数中被赋值的resp在ReadByte返回之后成了野指针!
twtpdc 2003-03-24
  • 打赏
  • 举报
回复

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧