我在编程序时,vc,经常程序编到一定程度,在删除一个控件或者添加一个控件之后,经常编译能通过,但是一运行就出错,一般是在程序关闭时发生错误,不知道为什么
1有人说是在删除控件时,有些地方没删干净,导致程序发生错误,那么请问,应该怎么保证删的干干净净哪?该怎么预防或者排除问题?
2,如果说删除控件,可能由于以上的原因,可是我添加控件程序出错(在关闭程序时),又是什么原因呢?
3,现在我碰到一个问题:我用MFC 生成程序框架(对话框),现在添加了一些控件(只有几个,很少),我定义了一些静态文本(IDC_STATIC)的变量(CString),在程序运行时,只要给定义的变量(属于静态文本的)赋值,(例:m_sys="1234")当关闭程序时,就有内存泄漏,不知道为什么??
还有一问题,同样一个程序,当我定义一个全局CString的变量时,不对这个变量进行任何操作,就会在关闭程序时,出错(无效句柄)为什么??

解决方案 »

  1.   

    如果你要对你的静态文本进行操作,那么这些static控件不要用默认的ID:ID_STATIC,
    给每个都起个唯一的名字
      

  2.   

    1, 先在类视图中删除控件的消息函数
       在Wizard中删除改控件的捆绑变量
       删除对话框上的控件
      

  3.   

    1、删除和控件相关的所有东西,包括变量,消息映射,消息响应函数,最好也把资源文件清理一下,然后重新全部编译一遍。
    2、最彻底的方法,把所有的在编译过程中产生的文件全部删除,比如:.clw,.ncb,.opt.....
    当然上面的步骤也是必须的!我想这样应该干净了吧!呵呵……
      

  4.   

    感谢几位的回答,我全记下了,
    等我以后碰到这样的问题时,我会试试的,
    对于我现在的这个问题,我的project的setting中general中micrsoft foundation classes中选择的是use shared dll,我改成use static library,编译再运行就没问题了
    然后,我再改回use shared dll,编译运行也没问题了,不知为什么?
    希望有人给解释一下.帖子再过一段时间结贴,
      

  5.   

    对于我现在的这个问题,我的project的setting中general中micrsoft foundation classes中选择的是use shared dll,我改成use static library,编译再运行就没问题了
    然后,我再改回use shared dll,编译运行也没问题了,不知为什么?我借此地方问一下
    这两个不同的选项有什么不同吗
      

  6.   

    刚找到的:选择As a shared DLL(使用共享动态连接库)或As a static linked library(静态连接库)。使用DLL时,所有MFC的类存放在动态连接库中,因此可以使应用程序小一些,但是发布该应用程序可执行文件时必需随同提供必要的动态连接库。使用静态库时,应用程序所用到的MFC类都编译进了可执行文件之中,因此可执行文件比使用DLL方式的要大,但可以单独发行。一般的,对于小的应用程序可以采用静态库方式,对于大的应用程序一般采用动态连接库方式。