debug无错 release出错 求助

Q_Jizi 2011-02-22 10:20:48
我写了一个test工程调用自己写的动态库,debug版在推出时抛出异常,退出时调用了clearAll函数:
clearAll()
{
.....
......
......
m_TeX = "";(CString类型的)
m_TeX2 = "";
}
跟踪了下发现异常是在CString的析构时产生的,注释掉后两行后就没问题了,但是release版的无论注释还是
不注释后两行都会在调用调用CDC的COLORREF oldColor = m_cdc->SetTextColor(c);函数时抛出异常,这是系统
函数,可以确定参数没问题,这可能是什么原因造成的?其他地方的内存泄露
可能导致这个问题吗?
...全文
178 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
xengine-qyt 2011-02-25
  • 打赏
  • 举报
回复
楼主这头像不是优酷那女流的头像麽?
deshare 2011-02-25
  • 打赏
  • 举报
回复
RELEASE和DEBUG有一个区别是DEBUG会对未初始化变量初始化,而RELEASE不会;
Q_Jizi 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 qiuxin425 的回复:]
COLORREF oldColor = RGB(*,*,*);
[/Quote]

你是说oldColor没有初始化吗?这个不需要吧
Q_Jizi 2011-02-25
  • 打赏
  • 举报
回复
问题解决了,DLL不小心选了“Use MFC in a Static Library”模式,但调用程序不是,这两个要一致。
谢谢大家参与,结贴。
Q_Jizi 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 aaadddzxc 的回复:]
楼主这头像不是优酷那女流的头像麽?
[/Quote]

??女流?WHO
Q_Jizi 2011-02-25
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 deshare 的回复:]
RELEASE和DEBUG有一个区别是DEBUG会对未初始化变量初始化,而RELEASE不会;
[/Quote]
这个我知道,COLORREF oldColor = m_cdc->SetTextColor(RGB(255,0,0));这句中没有需要初始化的参数 m_cdc也已经初始化了 否则它上面那句CFont* pOldFont = m_cdc->SelectObject(&font);也会出错。
Q_Jizi 2011-02-23
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 icefairy 的回复:]

感觉 debug 无错 release有错 可能是初始化 问题
[/Quote]
SetTextColor 的参数C初始化 ex->m_fontcolor = m_color; ex是自定义结构体,成员m_fontcolor以及m_color都是COLORREF类型的,可以确定m_color的值是正确的。
icefairy 2011-02-23
  • 打赏
  • 举报
回复
感觉 debug 无错 release有错 可能是初始化 问题
Q_Jizi 2011-02-23
  • 打赏
  • 举报
回复
问题还未解决 顶
qiuxin425 2011-02-23
  • 打赏
  • 举报
回复
COLORREF oldColor = RGB(*,*,*);

Q_Jizi 2011-02-22
  • 打赏
  • 举报
回复
[code=C]/C++ default:
if (ex->m_Value == _T('c'))
{
m_bCOS = true;
}
else if (ex->m_Value == _T('0'))
{
if (m_bCOS)
{
ex->m_Value = _T('o');
m_bCOS = false;
}
}
else if (ex->m_Value == _T('o'))
{
if (!m_bCOS)
{
ex->m_Value = _T('0');
}
m_bCOS = false;
}
else
{
m_bCOS = false;
}
CFont font;
font.CreatePointFont((ex->m_expAttrib.m_height-2)*10, _T("Times New Roman"), NULL);
CFont* pOldFont = m_cdc->SelectObject(&font);
AfxMessageBox("1");
COLORREF oldColor = m_cdc->SetTextColor(c);
AfxMessageBox("2");
wchar_t buffer[11];
memset(buffer,0,11);
buffer[0]=ex->m_Value;
m_cdc->TextOut(p.x+1+m_origin.x, p.y+1+m_origin.y, buffer);
font.DeleteObject();
break;[/code]
红色那句时抛出异常,BOX1是能显示的,因为release版 没法但不调试
Q_Jizi 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 eyey1 的回复:]
release版去掉SetTextColor呢?
[/Quote]
窗体一闪后消失了
我代码的功能是在test程序中画一些符号,然后调用dll的识别,显示函数识别出符号,最后在测试程序的文档中显示出来,所以SetTextColor也是在dll中的。
zhanshen2891 2011-02-22
  • 打赏
  • 举报
回复
看一下那个出错的地址是在系统dll里还是你自己的代码里,如果是你自己的代码那就容易多了

试试楼上的做法
手机写程序 2011-02-22
  • 打赏
  • 举报
回复
release版去掉SetTextColor呢?
Q_Jizi 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhanshen2891 的回复:]
这个异常的内容是什么??就是说是什么异常?

1. 你这是不是多线程的程序
2. m_cdc是不是已经无效了
3. 有地方有溢出导致某些数据被损毁了
[/Quote]

1 不是多线程的
2 m_cdc可以确定是有效的
3 这个不太确定
Q_Jizi 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhanshen2891 的回复:]
这个异常的内容是什么??就是说是什么异常?

1. 你这是不是多线程的程序
2. m_cdc是不是已经无效了
3. 有地方有溢出导致某些数据被损毁了
[/Quote]
就是抛出“内存不能为read”的对话框,debug版的没这个问题
zhanshen2891 2011-02-22
  • 打赏
  • 举报
回复
这个异常的内容是什么??就是说是什么异常?

1. 你这是不是多线程的程序
2. m_cdc是不是已经无效了
3. 有地方有溢出导致某些数据被损毁了
Q_Jizi 2011-02-22
  • 打赏
  • 举报
回复
CString会在程序结束时自己调用析构函数,我开始以为是多次析构,于是把最后两行的付空操作去掉了,这样debug是没问题了 但release去不去都会在SetTextColor处抛出异常。
Q_Jizi 2011-02-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
你的CString在exe中分配,但是在dll中释放?
[/Quote]

分配和释放都在dll中
Eleven 2011-02-22
  • 打赏
  • 举报
回复
你的CString在exe中分配,但是在dll中释放?

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧