Debug Assertion Failed!

YURUOCJY 2006-12-08 11:00:04
调试程序时,老是出错,有的时候可以调试,但结果出错。
蹦出来的出错提示是:
Debug Assertion Failed!
Program:......
File:afxtempl.h
Line:254
我在程序中使用了CArray。
请问这是什么原因阿
...全文
235 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
XY0437 2010-06-14
  • 打赏
  • 举报
回复
请问是怎么解决的呀,我也遇到了同样的问题
myfriend023 2006-12-08
  • 打赏
  • 举报
回复
ASSERT(nIndex >= 0 && nIndex < m_nSize);断言失败 说明nIndex不满足(nIndex >= 0 && nIndex < m_nSize);这个条件,检查一下吧
折腾_苏州 2006-12-08
  • 打赏
  • 举报
回复
明显数组越界了! 取数据确保 index < CArray::GetSize
liuqiyc 2006-12-08
  • 打赏
  • 举报
回复
nIndex >= 0 && nIndex < m_nSize
返回值为FALSE

检查nIndex的值
wsb_8224 2006-12-08
  • 打赏
  • 举报
回复
还有就是你是不是在线程里面进行的处理?如果是的话,在运行的时候肯定要出错,如果不是,可能是你的参数设置的有问题
ouyh12345 2006-12-08
  • 打赏
  • 举报
回复
nIndex不对
wsb_8224 2006-12-08
  • 打赏
  • 举报
回复
那看你是怎么运用的,回到程序中看看用了这个函数的地方,结合程序看看哪儿有错误
YURUOCJY 2006-12-08
  • 打赏
  • 举报
回复
AFX_INLINE TYPE CArray<TYPE, ARG_TYPE>::GetAt(int nIndex) const
{ ASSERT(nIndex >= 0 && nIndex < m_nSize);
return m_pData[nIndex]; }
这是第254行的内容,我用到了.GetAt()函数,用这个函数会出问题吗?
YURUOCJY 2006-12-08
  • 打赏
  • 举报
回复
我的程序能运行,但结果出错,有的时候调试能调试到最后一步。调试几次后就会出上面的错误。
wsb_8224 2006-12-08
  • 打赏
  • 举报
回复
File:afxtempl.h
Line:254
看这个系统文件中的254行,看看是什么地方出错了!
handsomerun 2006-12-08
  • 打赏
  • 举报
回复
跟踪,看跑到哪出错了
YURUOCJY 2006-12-08
  • 打赏
  • 举报
回复
问题解决了,谢谢大家
YURUOCJY 2006-12-08
  • 打赏
  • 举报
回复
我这个程序能连续比较两个文件,直到按下Cancel按钮才退出,第一遍比较的结果都是对的,
第二遍的结果就错了,比较完一次我就跳用清空的函数,清空的函数是:
from_id_1.RemoveAll();
from_id_2.RemoveAll();
to_id_1.RemoveAll();
to_id_2.RemoveAll();
ckt_1.RemoveAll();
ckt_1.RemoveAll();
p_1.RemoveAll();
p_2.RemoveAll();
把所有的数组都这样处理了
这样的清空对吗?
YURUOCJY 2006-12-08
  • 打赏
  • 举报
回复
for (i=0; i<File1_Count ; i++)
其中 File1_Count = from_id_1.GetSize();
所有我觉得没有越界哦
stevphen 2006-12-08
  • 打赏
  • 举报
回复
可能数组越界;
ASSERT(nIndex >= 0 && nIndex < m_nSize);表示nIndex >= 0 && nIndex < m_nSize不成立,你传入的Index可能小于0或者大于总数了。
关于龙书第13章地形绘制的terrain项目运行出错问题 (注:龙书即:《DirectX9.0 3D游戏开发编程基础》) 在学习该教材时,当我们试着编译并运行13章地形绘制的terrain项目时,发现运行出错,并弹出了一个出错提示窗口,提示我们::访问vector 越界了 提示窗口的内容如下: -------------------------------------------------------------------- Microsoft Visual C++ Debug Library Debug Assertion failed! Program:...cuments and Settings\Administrator\Terrain\Debug\Terrain.exe File: d:\microsoft visual studio 10.0\vc\include\vector Line:932 Expression : vector subscript out of range For information on how your program can cause an assertion Failure , see the Visual C++ documentation on asserts. (Press Retry to debug the application) [终止(A)] [重试(R)] [忽略(I)] ---------------------------------------------------------------------------------- 问题主要出现在terrain.cpp 文件中的几个函数内部传递参数最终作为了vector的索引值,得到的索引值没有经过限定,导致超出了vector的界限-----最终访问越界. 修改的地方在下面这几处: 在terrain.cpp文档里搜索”//修改过!!!” bool Terrain::genTexture(D3DXVECTOR3* directionToLight) float Terrain::computeShade(int cellRow, int cellCol, D3DXVECTOR3* directionToLight) float Terrain::getHeight(float x, float z) 在terrain.cpp文档里搜索”//注意这里!!!” /int Terrain::getHeightmapEntry(int row, int col) bool Terrain::lightTerrain(D3DXVECTOR3* directionToLight) 在terrainDriver.cpp文档里搜索”//注意这里!!!” float height = TheTerrain->getHeight( pos.x, pos.z ); 我的修改主要是通过在传递索引值的地方,限定索引值的范围,这样就避免了vector访问越界,这也是龙书作者在写该13章的代码时一时所忽略掉的. 只修改过terrain.cpp文件中的内容,其他的都没动.所以可以只将terrain.cpp拷贝到工程中替换掉原来的就可以了.

16,473

社区成员

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

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

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