关于Debug和Release的问题

TwoChars001 2003-05-08 01:15:19
我的程序在Debug里没有问题,在Release会出现问题,
主要是在程序退出的时候可能会非法操作(开始是XP下也有问题,现在只是9X下会有这个问题)
感觉像是在注销空间的时候出了问题。请问谁知道大概是什么地方出了问题?或者说Release的时候应该注意什么?
谢谢,呵呵。全部分数!(切实解决问题者另外有分!)
...全文
22 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
diabloqin 2003-05-08
  • 打赏
  • 举报
回复
up
In355Hz 2003-05-08
  • 打赏
  • 举报
回复
根据第三个提示看是程序中使用的 CString 变量的问题,注意是否有把 CString 强制转换为 LPTSTR 然后不小心被 delete 掉的情况
TwoChars001 2003-05-08
  • 打赏
  • 举报
回复
以上这些函数都是MFC类库的代码。
TwoChars001 2003-05-08
  • 打赏
  • 举报
回复
谢谢各位的解答,我刚才用BoundsChecker走了一遍,BoundsChecker发现了3个错误:
程序刚启动的时候还没有出现界面有这个错误
CWnd* CWnd::GetDlgItem(int nID) const
{
ASSERT(::IsWindow(m_hWnd));

if (m_pCtrlCont == NULL)
return CWnd::FromHandle(::GetDlgItem(m_hWnd, nID));//BoundsChecker报告这里
else
return m_pCtrlCont->GetDlgItem(nID);
}

说是Invalid argument
GetDlgItem, argument 2, DWORD: 0x0000E146
You have passed an invalid memory address as a pointer to a Windows API function.

在按了一个按钮开了一个线程后,报告是:
void CString::AssignCopy(int nSrcLen, LPCTSTR lpszSrcData)
{
AllocBeforeWrite(nSrcLen);
memcpy(m_pchData, lpszSrcData, nSrcLen*sizeof(TCHAR));//报告这里
GetData()->nDataLength = nSrcLen;
m_pchData[nSrcLen] = '\0';
}

You have passed an invalid memory address as a pointer to a Windows API function.

当退出(按X)程序的时候报告:
CString::~CString()
// free any attached data
{
if (GetData() != _afxDataNil)
{
if (InterlockedDecrement(&GetData()->nRefs) <= 0)//这里
FreeData(GetData());
}
}

Invalid argument
InterlockedDecrement, argument 1, PTR: 0xFFFFFFF4
CString的析构函数,之后出现非法操作。

前两个问题似乎不影响程序,而第三个问题似乎是非法操作的关键,请问谁知道怎么解决?谢谢!
zhang865 2003-05-08
  • 打赏
  • 举报
回复
你的动态分配的内存中有错误,
在DEBUG版本下,系统会分配较多的内存给程序,所以你的内存就可能没有出现问题,而在RELEASE版本下就不会了,所以有你上面的问题,给你个例子看看
char *str = new char[8]; //这是8个

str = "1234567890"; //这是十个

delete str;
okli 2003-05-08
  • 打赏
  • 举报
回复
建议:所有变量都初始化
maojincxj 2003-05-08
  • 打赏
  • 举报
回复
注意ASSERT的条件,它在release中不执行,
但可能你有要用的代码在里边
abc_rain 2003-05-08
  • 打赏
  • 举报
回复
GDI资源没有释放或,new和delete不成对等原因造成
zhoujinhua 2003-05-08
  • 打赏
  • 举报
回复
曾经我写过的一个也是,debug正常,release执行得到错误结果。
后来发现原因,是release版会对代码(汇编级)进行一些优化,而我的源程序中有内嵌汇编,从而最后的release版汇编代码有些移位(优化造成的)。
看看你的release版出现非分操作时应用程序代码位置(最好看assemble的),与debug版对比对比。
abc_rain 2003-05-08
  • 打赏
  • 举报
回复
内存泄露呀用BoundsChecker 试试
http://www.vckbase.com/tools/downtools.asp?id=22
TwoChars001 2003-05-08
  • 打赏
  • 举报
回复
UP有分,呵呵。

16,472

社区成员

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

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

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