| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 640 人关注过本帖
标题:用数组命名窗口句柄与一些函数发生内存冲突的问题
只看楼主 加入收藏
heavystorm
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2011-2-12
结帖率:0
收藏
 问题点数:0 回复次数:0 
用数组命名窗口句柄与一些函数发生内存冲突的问题
       我用VC++2005编了一个1700多行的程序,界面上有4个滚动条,用API函数建立的。当我同样用API函数建立写串口的各个子函数,编译执行后发现第四个滚动条消失,同时写串口函数停在WriteFile(……)那里不动了,整个程序界面出现异常(第四个滚动条彻底消失,一些按钮不显示,但拖拽窗口到显示器边界外再拖回来后这些按钮显示了),原本定时执行的SetTimer(……)也不执行了。

        在编这个程序的前期,我遇到类似的问题。有两个按钮,点一个在左边放上一个图片,比如该图片名称为A1,点另一个按钮在右侧放上一个图片,开始时我设置该图片名称为A2,但运行程序时,A2的图片加载不了。如果把A2改成其他名,比如AA就能正常加载。

         现在我修改了程序,不加载那4个滚动条,结果串口通信可以完全按照预想的情况进行。那四个滚动条的句柄是按数组方式命名的:static HWND hwndscroll[4];,建立时名称为hwndscroll[0]、hwndscroll[1]、hwndscroll[2]、hwndscroll[3]。写串口WriteFile(……)与名称为hwndscroll[3]的滚动条发生冲突,曾经显示为0x00000103 处未处理的异常: 0xC0000005: 读取位置 0x00000103 时发生访问冲突,后来修改了程序,运行时不知怎么搞的不出现内存冲突了,但第四个滚动条消失,程序混乱。

         后来我将滚动条句柄改为static HWND PWMscroll[4];,运行时仍旧第四个滚动条消失。
         
         不知你编程时是否遇到过类似情况。为何写串口函数WriteFile(……)非要与滚动条hwndscroll[3]发生冲突,导致程序混乱?他怎么不与滚动条hwndscroll[2]发生冲突呢?
         而这种冲突不应该发生啊,编译器分配的内存会出错?非要将WriteFile(……)操作的内存地址设置为滚动条hwndscroll[3]的内存地址?

         如果我将hwndscroll[3]删除,根据我的经验,WriteFile(……)将与hwndscroll[2]冲突,删除hwndscroll[2],WriteFile(……)将与hwndscroll[1]冲突……,除非将四个滚动条的名称改为与数字编号无关的名称,比如abc,bcd,cba等,才不会冲突,这是怎么回事?在我的程序中,对滚动条句柄进行数组编号是必须的,因为按TAB键会在4个滚动条中选择焦点,这个子函数是通过数组编号进行的。

         我概括一些这个问题:一些函数会与带有数字编号的其他object发生内存冲突,怎么会这样?这种问题怎么解决(既采用数组或数字编号命名,又不发生内存冲突)?
搜索更多相关主题的帖子: 显示器 图片 
2011-02-27 14:59
快速回复:用数组命名窗口句柄与一些函数发生内存冲突的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023724 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved