<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成员函数详解** 在Microsoft Foundation Class (MFC) 库中,`CByteArray` 是一个非常重要的类,它提供了对动态数组的封装,专为...在学习和使用MFC时,深入理解`CByteArray` 及其操作方法是十分必要的。
- `SetAtGrow`: 在指定位置设置元素值,如果索引超出当前数组大小,则会自动扩展数组大小。 - `Add`: 在数组末尾添加一个元素,如果需要则扩展数组大小。 - `Append`: 将另一个数组的内容追加到当前数组的末尾,如果...
在实际开发中,MFC数组类的使用方法基本相同,下面是MFC数组类的使用方法: * CByteArray:8位无符号整数BYTE类型,范围为0—255,头文件Afxcoll.h。 * CArray:16位无符号整数WORD类型,范围为0—65535,头文件...
在IT领域,内存读写是程序执行的基本操作之一,特别是在C++编程中,MFC(Microsoft Foundation Classes)库提供了一套面向对象的方式来处理Windows应用程序。本文将深入探讨使用MFC进行内存读写的相关知识点,以及...
对于DAO,使用`CRecordset`的`SetFieldVal`方法,传递`CByteArray`作为参数。 3. **图片读取**: - 打开包含图片的记录集,获取二进制数据。ADO使用`GetFieldBlob`,DAO使用`GetFieldData`。 - 创建一个`CFile`...
### 1500多个MFC类:深入解析与应用 #### 一、概述 Microsoft Foundation Classes (MFC) 是一套由微软提供的面向对象的C++类库,它为Windows编程提供了一种更加抽象和面向对象的方式。MFC类库包含了大量的类,这些...
MFC的CFile类可以帮助读取和写入文件,而CByteArray或CArray可以用来存储和操作数据块。 3. **多线程**:为了不影响用户界面的响应,文件传输通常在后台线程进行。MFC的CWinThread类提供了一个创建和管理线程的框架...
在MFC中,这些方法通常与CFile或CByteArray等数据容器结合使用,以便更方便地处理数据。 6. **关闭连接**:当通信结束时,记得关闭套接字。客户端和服务器端都要调用CSocket::Close以释放资源。 在实际编程中,...
- **CByteArray**:字节型数组。 #### 十一、其他控件 - **CMFCAutoHideButton**:自动隐藏的按钮。 - **CMFCCaptionButton**:标题栏按钮。 - **CMFCToolBarButton**:工具栏按钮。 - **CMFCTasksPaneTask**:任务...
- **CArray** 及其派生类 **CDWordArray**、**CObArray**、**CPtrArray**、**CStringArray**、**CUIntArray**、**CWordArray**、**CByteArray**:这些类提供了数组操作的功能。 #### 6. 其他控件 - **...
MFC提供了多种数组类,如CByteArray、CDWordArray、CPtrArray、CUIntArray、CWordArray和CStringArray,它们分别用于存储字节、DWORD、指针、无符号整数、字和字符串数组。这些类都提供了以下基本操作: - `Add()`...
在MFC中,我们可以使用CByteArray或CString等数据结构来存储接收到的数据块。解析过程可能涉及读取固定长度的字段、解析浮点数或字符串等。根据机械臂数据的协议,可能需要定义特定的解析规则,例如按照特定的结构体...
##### 2.11 CByteArray - **描述**:字节数组类,用于存储字节序列。 - **头文件**:`afxcoll.h` - **应用场景**:用于处理二进制数据或在网络通信中传输数据。 ##### 2.12 CCachedDataPathProperty - **描述**:...
如果图片数据以二进制形式存储,可以使用`CByteArray`来接收并解码,然后加载到图像控件如`CStatic`或`CEdit`中。如果是路径,可以直接加载图片文件。 6. **修改和保存**:用户可以修改对话框中的信息,比如更新...
- **`CByteArray`**: 字节数组容器。 - **头文件**:`afxcoll.h` #### 2. 控件类 - **`CButton`**: 按钮控件。 - **头文件**:`afxwin.h` - **`CComboBox`**: 下拉列表控件。 - **头文件**:`afxwin.h` - **`...
在本文中,我们将深入探讨如何在MFC(Microsoft Foundation Classes)环境下使用ADO(ActiveX Data Objects)来访问数据库,并支持图片的保存与显示。DataGrid控件被用于关联数据显示,这是一个非常实用的功能,使得...
5. **CByteArray类**:提供了数组操作的基本功能,例如通过GetAt方法获取特定索引的元素,SetAt用于设置元素值,RemoveAll用于清空数组,SetAtGrow用于在数组末尾添加元素,并可选择性地扩展数组大小。 6. **CCmdUI...
- **`CByteArray`** 头文件:`afxcoll.h` 描述:这是一个字节数组类,用于存储和操作字节序列。 ##### C - **`CCachedDataPathProperty`** 头文件:`afxctl.h` 描述:这个类用于缓存数据路径属性,通常用于...
这里的`COleVariant`是MFC中用于封装各种数据类型的数据结构,它使得我们可以将`CByteArray`对象传递给`put_Output`方法。 7. 清空编辑框并更新内容,以便用户可以输入新的数据。 `StringtoHex`函数的工作原理是...
### MFC类与头文件对应关系详解 #### 概述 Microsoft Foundation Classes (MFC) 是微软提供的一个基于Windows API的面向对象的类库。它为开发者提供了丰富的封装类,大大简化了Windows程序的开发过程。为了更好地...