[急!!!]内存溢出??

chennan   2008-4-19 20:44 楼主
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出错了,还是写进串口时出错了??求救啊~~~~~

回复评论 (9)

m_strSend.GetLength()*2为啥乘以2啊,CopyMemory时不是越界了吗
点赞  2008-4-19 20:50
哦,有些明白了...谢谢啦
点赞  2008-4-19 21:43
来晚了,就是这个原因。
点赞  2008-4-21 13:11
但是还是有问题,能够输入的数据不确定,好像还是copymemory那错了。是不是源数据块和要写入的内存块有重叠?如果是的话,那要怎么解决??谢谢啦
点赞  2008-4-22 18:53
今天的网络真破,刷了几次才把页面刷出来,^_^

是不是源数据块和要写入的内存块有重叠?这个问题不会出现,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,看有没有变量出现异常。
点赞  2008-4-23 16:28
tnnd,成白字先生了,又不提供编辑功能,晕了
点赞  2008-4-23 16:29
:-)非常感谢啦...
点赞  2008-4-24 22:01
不会,帮顶
点赞  2008-4-30 18:40
有点难度哦
点赞  2008-4-30 20:56
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复