`

MFC--CByteArray的方法SetAtGrow的BUG

阅读更多
<meta content="MSHTML 6.00.2900.3199" name="GENERATOR"> <style></style>2006年06月27日 22:13:00

今天在调试IO驱动时,发现了CByteArray的方法SetAtGrow的一个BUG。

发生问题的代码如下:

switch(mItems[i].lngTemp[2])
{
case TYPE_BIT:
case TYPE_B:
case TYPE_BCD:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
break;
case TYPE_W:
case TYPE_I:
case TYPE_IBCD:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R');
break;
case TYPE_DW:
case TYPE_DI:
case TYPE_R:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+2,'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+3,'R');
break;
}
当该段代码被n次(约75左右)调用后,当mItems[i].lngTemp[0]

case TYPE_W:
case TYPE_I:
case TYPE_IBCD:
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R'); -- 这句没有问题
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R'); -- 这句会使程序崩溃
break;

目前修改为:

if(bytFlag.GetSize()>mItems[i].lngTemp[0]+2)bytFlag.SetSize(mItems[i].lngTemp[0]+2);
bytFlag.SetAtGrow(mItems[i].lngTemp[0],'R');
bytFlag.SetAtGrow(mItems[i].lngTemp[0]+1,'R');

则程序没有问题了,看来SetAtGrow真有点问题

----------------------------------------------

后记:后来发现真正解决问题的症结为:

VC++ int 4个字节 long 4个字节

DOS C/C++ int 2个字节 long 4个字节

VB integer 2个字节 long 4个字节

有可能是内存溢出,而导致上述问题



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=842388


分享到:
评论

相关推荐

    CByteArray成员函数.rar_CByteArray 函数_QNN_afxcoll.h_mfc cbytearray_th

    **CByteArray成员函数详解** 在Microsoft Foundation Class (MFC) 库中,`CByteArray` 是一个非常重要的类,它提供了对动态数组的封装,专为...在学习和使用MFC时,深入理解`CByteArray` 及其操作方法是十分必要的。

    COleVariant和CByteArray

    - `SetAtGrow`: 在指定位置设置元素值,如果索引超出当前数组大小,则会自动扩展数组大小。 - `Add`: 在数组末尾添加一个元素,如果需要则扩展数组大小。 - `Append`: 将另一个数组的内容追加到当前数组的末尾,如果...

    MFC的数组类CArray使用详解-赞

    在实际开发中,MFC数组类的使用方法基本相同,下面是MFC数组类的使用方法: * CByteArray:8位无符号整数BYTE类型,范围为0—255,头文件Afxcoll.h。 * CArray:16位无符号整数WORD类型,范围为0—65535,头文件...

    读写内存的测试代码MFC

    在IT领域,内存读写是程序执行的基本操作之一,特别是在C++编程中,MFC(Microsoft Foundation Classes)库提供了一套面向对象的方式来处理Windows应用程序。本文将深入探讨使用MFC进行内存读写的相关知识点,以及...

    mfc+access数据库,加入存取图片

    对于DAO,使用`CRecordset`的`SetFieldVal`方法,传递`CByteArray`作为参数。 3. **图片读取**: - 打开包含图片的记录集,获取二进制数据。ADO使用`GetFieldBlob`,DAO使用`GetFieldData`。 - 创建一个`CFile`...

    1500多个MFC类

    ### 1500多个MFC类:深入解析与应用 #### 一、概述 Microsoft Foundation Classes (MFC) 是一套由微软提供的面向对象的C++类库,它为Windows编程提供了一种更加抽象和面向对象的方式。MFC类库包含了大量的类,这些...

    MFC实现文件传输

    MFC的CFile类可以帮助读取和写入文件,而CByteArray或CArray可以用来存储和操作数据块。 3. **多线程**:为了不影响用户界面的响应,文件传输通常在后台线程进行。MFC的CWinThread类提供了一个创建和管理线程的框架...

    MFC实现数据的发送和接收

    在MFC中,这些方法通常与CFile或CByteArray等数据容器结合使用,以便更方便地处理数据。 6. **关闭连接**:当通信结束时,记得关闭套接字。客户端和服务器端都要调用CSocket::Close以释放资源。 在实际编程中,...

    MFC+类库结构图1

    - **CByteArray**:字节型数组。 #### 十一、其他控件 - **CMFCAutoHideButton**:自动隐藏的按钮。 - **CMFCCaptionButton**:标题栏按钮。 - **CMFCToolBarButton**:工具栏按钮。 - **CMFCTasksPaneTask**:任务...

    MFC类图(最新版本)

    - **CArray** 及其派生类 **CDWordArray**、**CObArray**、**CPtrArray**、**CStringArray**、**CUIntArray**、**CWordArray**、**CByteArray**:这些类提供了数组操作的功能。 #### 6. 其他控件 - **...

    MFC通用类的使用.docx

    MFC提供了多种数组类,如CByteArray、CDWordArray、CPtrArray、CUIntArray、CWordArray和CStringArray,它们分别用于存储字节、DWORD、指针、无符号整数、字和字符串数组。这些类都提供了以下基本操作: - `Add()`...

    MFC SOCKET 接收机械臂实时数据客户端

    在MFC中,我们可以使用CByteArray或CString等数据结构来存储接收到的数据块。解析过程可能涉及读取固定长度的字段、解析浮点数或字符串等。根据机械臂数据的协议,可能需要定义特定的解析规则,例如按照特定的结构体...

    MFC类目录及头文件

    ##### 2.11 CByteArray - **描述**:字节数组类,用于存储字节序列。 - **头文件**:`afxcoll.h` - **应用场景**:用于处理二进制数据或在网络通信中传输数据。 ##### 2.12 CCachedDataPathProperty - **描述**:...

    MFC相册图片存取展示

    如果图片数据以二进制形式存储,可以使用`CByteArray`来接收并解码,然后加载到图像控件如`CStatic`或`CEdit`中。如果是路径,可以直接加载图片文件。 6. **修改和保存**:用户可以修改对话框中的信息,比如更新...

    MFC常用类的对应的头文件

    - **`CByteArray`**: 字节数组容器。 - **头文件**:`afxcoll.h` #### 2. 控件类 - **`CButton`**: 按钮控件。 - **头文件**:`afxwin.h` - **`CComboBox`**: 下拉列表控件。 - **头文件**:`afxwin.h` - **`...

    MFC下通过ADO访问数据库,支持图片保存,用DataGrid关联显示。

    在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)环境下使用ADO(ActiveX Data Objects)来访问数据库,并支持图片的保存与显示。DataGrid控件被用于关联数据显示,这是一个非常实用的功能,使得...

    常用MFC和API函数.pdf

    5. **CByteArray类**:提供了数组操作的基本功能,例如通过GetAt方法获取特定索引的元素,SetAt用于设置元素值,RemoveAll用于清空数组,SetAtGrow用于在数组末尾添加元素,并可选择性地扩展数组大小。 6. **CCmdUI...

    MFC类和头文件.pdf

    - **`CByteArray`** 头文件:`afxcoll.h` 描述:这是一个字节数组类,用于存储和操作字节序列。 ##### C - **`CCachedDataPathProperty`** 头文件:`afxctl.h` 描述:这个类用于缓存数据路径属性,通常用于...

    MFC串口通信发送16进制数据的方法

    这里的`COleVariant`是MFC中用于封装各种数据类型的数据结构,它使得我们可以将`CByteArray`对象传递给`put_Output`方法。 7. 清空编辑框并更新内容,以便用户可以输入新的数据。 `StringtoHex`函数的工作原理是...

    MFC类对应的头文件

    ### MFC类与头文件对应关系详解 #### 概述 Microsoft Foundation Classes (MFC) 是微软提供的一个基于Windows API的面向对象的类库。它为开发者提供了丰富的封装类,大大简化了Windows程序的开发过程。为了更好地...

Global site tag (gtag.js) - Google Analytics