为什么在Debug下读写正常的串口程序在Release下就不行了呢?分不够再加啦

fly_woman 2003-12-08 11:53:20
为什么在Debug下读写正常的串口程序在Release下就不行了呢?
...全文
207 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluebohe 2003-12-08
  • 打赏
  • 举报
回复
你可以勉强在Release下面调试
release版本也能凑合调试,project--setting--c/c++,debug info选program database,
project--setting--link,勾上generate debug info,重新编译
fly_woman 2003-12-08
  • 打赏
  • 举报
回复
用什么函数给CString类型的变量分配空间?
zhangnanonnet 2003-12-08
  • 打赏
  • 举报
回复
应该是你用于接收数据的BUF没有分配空间,在BEBUG下程序会自动分配,但是RELEASE不行
once168 2003-12-08
  • 打赏
  • 举报
回复

m_strReceive = m_strReceive+"\0";/*这个代码不起作用*/

m_strReceive = m_strReceive + pReadBuffer;
这个代码改成:
char buf[0x2]={0,0};
buf[0]=pReadBuffer;
m_strReceive = m_strReceive + CString(buf)




ISunwu 2003-12-08
  • 打赏
  • 举报
回复
m_strReceive是个什么变量?是edit的相关变量么?
fly_woman 2003-12-08
  • 打赏
  • 举报
回复
在Release下单步跟踪就会运行正常,一旦没有断点全速运行就不行了,这是为什么啊?
fly_woman 2003-12-08
  • 打赏
  • 举报
回复
void CTsView::OnCommNotify(WPARAM wParam,LPARAM lParam)
{
CComm *pComm = GetComm();
char pReadBuffer;
CString strUnit;

if((wParam&EV_RXCHAR) == EV_RXCHAR){
if(pComm->ReadComm(&pReadBuffer,1)){
if(pReadBuffer != '$')
m_strReceive = m_strReceive + pReadBuffer;
else{
m_strReceive = m_strReceive+"\0";
UpdateData();
switch (m_strReceive.GetAt(1)){
case CumQuality:
strUnit = "t";
DisposeData(m_strQuality , strUnit);
break;
case QualityFlux:
strUnit = "t/h";
DisposeData(m_strFlux , strUnit);
break;
.
.
.
case WaterDensity:
strUnit = "g/cm3";
DisposeData(m_strWaterDensity , strUnit);
break;
default:
break;
}
UpdateData(FALSE);
m_strReceive.Empty();
}
}
}
SetEvent(pComm->m_hCommMsgEvent);
}
以上代码是串口有数据时的消息函数,在Debug 下时,m_strReceive接收正常,但在Release下时只有一般最多只有四个长度为正确字符串的最后四个字符,偶尔会得到正常数据,为什么?
robinzo 2003-12-08
  • 打赏
  • 举报
回复
CString是自动分配空间的,也是变大小的,可以放入很大的字串,你的问题肯定不是在这里。Debug和Release有一些区别,如Debug版中,如果找不到适用的地址空间会给你返回cc,而Release版中会给你返回某个地址空间中的值,也就是说,你程序中不严谨的地方会导致在Release版中出现错误,如没有区分判断char*字串的null和strlen()=0的情况等等。。。
checkyvc6 2003-12-08
  • 打赏
  • 举报
回复
你能不能说的具体一点,哪个地方出错,哪个地方有问题,你得写出来啊,你这样说神仙也
帮不了你啊

CString是自动分配的,默认构造函数只分配一个字节的长度的空间('\0')
以后在操作过程当中会自动调整大小.
CString strTemp('\0',1024); //这样分配1024的空间每个字节为'\0'
ISunwu 2003-12-08
  • 打赏
  • 举报
回复
吧你读写串口的代码贴出来看看。

2,643

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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