EVC书上的例子,但是程序有些错,如果输入数字超过2个,程序自动关闭。或是输入字母有时出现同样情况。内存分配的函数如下,这些数据还没写入串口缓冲区呀,占用的内存应该也不多呀。是什么问题啊???
获取用户输入:BYTE * buf;
int bufLen = m_strSend.GetLength()*2;
buf = new BYTE(bufLen);
CopyMemory(buf,m_strSend.GetBuffer(m_strSend.GetLength()),bufLen);
if (!m_ceSeries.WritePort(buf,bufLen))
{
AfxMessageBox(L"cannot write to Comm");
}
会不会是CopyMemory出错了,还是写进串口时出错了??求救啊~~~~~
m_strSend.GetLength()*2为啥乘以2啊,CopyMemory时不是越界了吗
但是还是有问题,能够输入的数据不确定,好像还是copymemory那错了。是不是源数据块和要写入的内存块有重叠?如果是的话,那要怎么解决??谢谢啦
今天的网络真破,刷了几次才把页面刷出来,^_^
是不是源数据块和要写入的内存块有重叠?这个问题不会出现,new申请的是没有被
申请的内存地址,不知道你的代码该国没有,不过我有几点建议:
1、目的数据块空间要足够容纳源数据块,这点达到了要求;
2、从源数据块拷贝数据到目的数据块,拷贝的数据不能超过源数据块的长度,上面的代码不满足;
3、使用GetBuffer的时候参数用0就行了,从GetBuffer的源代码可以看出,参数小于字符串的实际长度时,
取的就是实际长度的字符串。见
X:\Program Files\Microsoft Visual Studio\VC98\MFC\SRC\STRCORE.CPP
……
if (nMinBufLength < nOldLen)
nMinBufLength = nOldLen;
……
4、new出来的数据占有的内存在使用完之后需要用delete释放掉。
5、如果是在不好找的话,可以用rational purify之类的工具测试一下,定位内存出错的地址,这个工具对
测试内存泄露、下标越界之类的错误非常好用。
6、建议多debug,看有没有变量出现异常。