Release版本正常,Debug版本出错?

songfen8432 2003-06-19 09:16:12
小弟新近开发的一个程序,Release和Debug版本均能编译通过,但是运行时Release版本正常,而Debug版本却报告Debug Assertion Failed错误,我将Debug目录删除重新编译,问题依然存在,这是怎么回事呢?还请各位大侠指点。
...全文
103 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
songfen8432 2003-06-19
  • 打赏
  • 举报
回复
果然!
我的程序中有IMediaDet* pMediaDet;
在程序结束时予以删除,结果就报错;
将delete pMediaDet;语句去除,问题得以解决。
多谢各位大侠!结贴!
E17 2003-06-19
  • 打赏
  • 举报
回复
你的问题 应该是 删除了两次 堆指针。。 导致的。你看我猜的对不对。。
yndfcd 2003-06-19
  • 打赏
  • 举报
回复
楼上的观点可能是对的。但有些情况例外。

我以前遇到过这样的情况,在程序中使用了结构化异常处理。

__try
{
Array[i] = element;
}
__exception(EXCEPTION_CONTINUE_EXCUTION)
{
Arrary = HeapReAlloc(...);
}
可以肯定,这段代码没有问题。但是在Debug下出错,release下正常。
后来查核心编程才知道结构化异常处理在debug版本下,是不起作用的。因此,如果使用结构化异常处理的话。在debug下程序是无法正常工作的。
songfen8432 2003-06-19
  • 打赏
  • 举报
回复
另外,报错的是在dbgheap.c程序中的语句_ASSERTE(_CrtIsValidHeapPointer(pUserData));
songfen8432 2003-06-19
  • 打赏
  • 举报
回复
谢谢各位大侠!
我的程序中确实有字符格式转换过程,是从CString到Unicode的转换,我已经添加为空的判断了,可是依然报错,大侠能否帮我看看:
// 初始化COM和指针

bool bIniS = Initialize();

if (!bIniS)
return;


CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Movie Files (*.avi;*.mpg;*.mpeg)|*.avi;*.mpg;*.mpeg|Audio Files (*.wav;*mp3;*.mpa;*.mpu;*.au)|*.wav;*.mp3;*.mpa;*.mpu;*.au|Midi Files (*.mid;*.midi;*.rmi)|*.mid;*.midi;*.rmi||", this);

if (dlgFile.DoModal() == IDOK)
m_sFileName = dlgFile.GetFileName();
else
return;

if (m_sFileName.IsEmpty())
{
AfxMessageBox("File Name is empty!");
return;
}

// 设置对话框标题栏为文件名

AfxGetMainWnd()->SetWindowText(m_sFileName);


// ANSI TO Unicode

USES_CONVERSION; // 需要#include <atlbase.h>

LPCWSTR wsFileName = A2W(m_sFileName);



// Build the graph

hr = m_pGraph->RenderFile(wsFileName, NULL);

if (FAILED(hr))
{
AfxMessageBox("DirectShow 不支持此种格式的文件!");
return;
}

E17 2003-06-19
  • 打赏
  • 举报
回复
同意 dz_w(快乐之星) 的说法
在debug 里面 ASSERT 报错 你还可以查,好象是终止进去看 ,是哪里错了。
你release 里面 对ASSERT 不编译,但是 你的程序 还是有问题的,只不过不是很明显
njtu 2003-06-19
  • 打赏
  • 举报
回复
不是DEBUG的错,是你的程序有错误!跟踪一下看看这个Debug Assertion Failed到底出现在那里,然后改正你的程序。
zyleon 2003-06-19
  • 打赏
  • 举报
回复
gz
lipeng518888 2003-06-19
  • 打赏
  • 举报
回复
估计直接使用了空指针,或是还未创建的窗口句柄
earthwormqiu 2003-06-19
  • 打赏
  • 举报
回复
我也遇到过这样的问题,同意 dz_w(快乐之星) 的说法,我就是出了这个问题
tyjoe 2003-06-19
  • 打赏
  • 举报
回复
我也遇到过这样的情况,

我当时的情况是这样的:::

将数据库里的NULL值,取了出来,进行宽字符到多字节转换是出了这样的错,

看看你程序是不是也有这样的问题??

解决方法是先判断一下是不是为NULL,~如下::


VOID GetFieldValue(_RecordsetPtr& pRecordset,_variant_t vFieldName,CHAR &szFieldValue,INT nSize)
{
FieldPtr pfldValue;
_variant_t vValue;
pfldValue = pRecordset->Fields->GetItem(vFieldName);
vValue.Clear();
vValue = pfldValue->Value;
memset(&szFieldValue,'\0',nSize);
if(vValue.vt != VT_NULL)
{
WideCharToMultiByte(CP_ACP, 0, vValue.bstrVal, -1, &szFieldValue, nSize, "\0", NULL);
}
}
dz_w 2003-06-19
  • 打赏
  • 举报
回复
应该是你的一些指针一类的出错了,因为在DEBUG版中有ASSERT等进行差错控制,但这些在RELEASE中不起作用,因此在RELEASE不报错。方法是你用DEBUG跟踪查看什么时候出现错误,因为即使你的RELEASE版表面无错,实际还是有隐患的。
coyer 2003-06-19
  • 打赏
  • 举报
回复
还真是头一次听说,这个就不太好办了.
慢慢调试吧,找到错误的地方,再来问
songfen8432 2003-06-19
  • 打赏
  • 举报
回复
多谢了

16,472

社区成员

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

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

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