mfc 程序,debug版本正常和release版本异常。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mfc 程序,debug版本正常和release版本异常。相关的知识,希望对你有一定的参考价值。

下面一段代码:
CEdit *pEdit;
CString strTmp;
pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->GetWindowText(strTmp);
在debug版本下正常运行,但是如果改成release版本的话就会在 pEdit->GetWindowText(strTmp); 报出异常,在这种情况下,如果我将前面的CString strTmp;在声明的时候改成 CString strTmp = “null”;(就是给它赋一个初值,空字符串还不行,一定要有内容)
当我改了以后release版本也可以正常运行了,求大神指点这是声明原因?

我怀疑是编译器设置的原因,但是却不知道如何修改,求指点!!!先拜谢了。。。

我测试了一下,RELEASE编译,即使空内容获取也没有问题。

我觉得,应该是你的项目中RELEASE版本的优化做的太多,或者程序其它原因造成的。

因为版本和环境差异,建议你自己先试验一下:

建立一个类似的MFC对话框工程,简单一个按钮一个编辑框,使用以上代码,RELEASE编译,看看有没有问题,如果没有,对比一下RELEASE版本的优化参数有什么不同(有就调整),如果没有不同,那么应该是你程序其它代码干扰的问题了,这种干扰问题很麻烦,只能是熟悉代码的情况下进行分析优化,没有太好的建议。

追问

您好,您的这种方法我也尝试过,新建一个小的mfc程序,我自己试的时候也是正常的,两种版本都可运行,可是一到我现在项目的那个mfc程序里面就出问题了,我也对照了两个mfc程序里面release版本所做的优化,并且做了相应的修改,可结果还是不行。。。。
真的是个很奇怪的问题。

追答

一般这种情况,多数是其它代码地址越界或者溢出之类的干扰,或者全局、作用域方面的影响,没法直接判断。
可以先注销代码方式,一个一个功能的注销看看,什么时候能正常,然后再集中分析代码问题。

参考技术A

何必非要转换CEdit 指针?


直接利用CDialog 基类中的SetDlgItemText() 方法或WIN32 API 即可。 


    基类方法: SetDlgItemText(IDC_EDIT1, strTemp);

    WIN32 API: ::SetDlgItemText(m_hWnd,IDC_EDIT1, strTemp);

VS2010 C++ MFC写的程序编译可以正常运行,但是我想直接运行,DEBUG里找不到EXE文件

我刚学C++,以前都是用C#,不知道是不是搞错了,求大家指导一下谢谢
呵呵,不用回答了,原来是我搞错文件夹了

你重新生成一下,然后在你的项目的上一级目录中找到Debug目录,里面有exe文件,不是在项目文件夹内的Debug文件夹。 参考技术A 呵呵,我还以为你生成release版本了。。。 参考技术B 有2个debug文件夹

以上是关于mfc 程序,debug版本正常和release版本异常。的主要内容,如果未能解决你的问题,请参考以下文章

DEBUG 和Release的区别

MFC读取excel文件程序,在release模式下正常读取,但在debug模式编译没问题,运行就关闭,求高手!

VS2010 C++ MFC写的程序编译可以正常运行,但是我想直接运行,DEBUG里找不到EXE文件

CMFCColorDialog 在 MFC 属性页中作为 Release 不工作,作为 Debug 工作正常

Mfc中release下提示未定义入口点,在debug模式下可以正常运行,这是为啥啊,应该怎么解

一般程序在Debug版能够运行,在Release版就不能运行,啥原因?