Debug Assertion Failed!嘛意思?

gxh870919 2010-04-11 05:32:17
我的一个C程序(比较长,300多行,大家想看的话就贴出来),编译没错,但是运行(VS2008)之后出现这个问题。
Debug Assertion Failed!
Program: e:\Projects\***\ICC.exe(笔者注:可执行文件名)
File:f:\dd\vctools\crt_bld\self_x86\crt\src\fprintf.c(笔者注:我不明白为什么是因为在文件中打印的错误)
Line:55 (笔者注:这个“55”指的是我源程序的第55行,还是fprintf.c的第55行……)

Exprssion:(str!=NULL)(笔者注:这个应该是关键,但是不懂)
————————————————————————————————
上面是错误信息。
当我的循环和数据比较小时,能成功运行;当循环或数据比较大时,就出现上述错误。
不知道谁遇到过这种错误,给小弟提供一些经验。
需要源程序的话,我就传上来。
谢谢了
...全文
465 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
paul2204 2011-08-22
  • 打赏
  • 举报
回复
我也遇到了你的问题。
我是发现自己在一个被多次使用的函数里打开了一个文件,却没有关闭它。
我在函数最后关闭这个文件,这样就不会有如你所说的错误了。
gxh870919 2010-04-13
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 skyworth98 的回复:]
1. 更改链接选项,调整栈空间大小。不过不建议这么干,因为那么大的数组,你该不会只用一次吧?
2. 使用堆,通过*alloc之类的函数分配内存。

若是采用你说的第二种方法,可能要改的程序部分就比较多了,我想我还是采用第一种吧,虽然我也不想用第一种方法。
或者我把这个程序改成C++(把.c改成cpp),然后用C++里的数组应该也可以。
我说的C++里的数组,指的是我建一个模板template,这个模板表示一个数组(不管是多少维,不管是什么类型都可以被这个模板所概括)。然后直接套模板新建数组subject[DANUM][50*NC],只是我不知道这个数组内存是不是连续的,若是不连续便好,就不用考虑stack size了;若是连续,那这种方法应该就失败了。
skyworth98 2010-04-13
  • 打赏
  • 举报
回复
1. 更改链接选项,调整栈空间大小。不过不建议这么干,因为那么大的数组,你该不会只用一次吧?
2. 使用堆,通过*alloc之类的函数分配内存。

[Quote=引用 6 楼 gxh870919 的回复:]
可能是我定义了一个数组subject[DANUM][50*NC]。当其中一维比较大时,就会溢出,比如说是1000*50(DANUM=1000,NC=1)。超过了缺省1M的stack size,怎么办?
[/Quote]
白云飘飘飘 2010-04-12
  • 打赏
  • 举报
回复
使用动态内存吧
gxh870919 2010-04-11
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 vmary 的回复:]
引用 3 楼 gxh870919 的回复:
我刚刚调试了一下 提示的是stack overflow。原因可能是某个变量太大,但是又不知道是哪个变量。
哎,搞了一个晚上了。

数组默认1M。你在看看,不妨都给他们sizeof()一下
[/Quote]
我猜就应该是这个int数组subject[DANUM][50*NC]。但是没有在技术上确定是不是。
gxh870919 2010-04-11
  • 打赏
  • 举报
回复
可能是我定义了一个数组subject[DANUM][50*NC]。当其中一维比较大时,就会溢出,比如说是1000*50(DANUM=1000,NC=1)。超过了缺省1M的stack size,怎么办?
Vmary 2010-04-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 gxh870919 的回复:]
我刚刚调试了一下 提示的是stack overflow。原因可能是某个变量太大,但是又不知道是哪个变量。
哎,搞了一个晚上了。
[/Quote]
数组默认1M。你在看看,不妨都给他们sizeof()一下
ForestDB 2010-04-11
  • 打赏
  • 举报
回复
不妨多点代码。
gxh870919 2010-04-11
  • 打赏
  • 举报
回复
我刚刚调试了一下 提示的是stack overflow。原因可能是某个变量太大,但是又不知道是哪个变量。
哎,搞了一个晚上了。
白云飘飘飘 2010-04-11
  • 打赏
  • 举报
回复
这里是使用了断言,这是调试的一种方法:
assert(str!=NULL);str为NULL时要提示有错误
机智的呆呆 2010-04-11
  • 打赏
  • 举报
回复
应该在str!=NULL有一个assert的,也就是说程序逻辑期望str是不为null的,而现在str==null了,所以debug一下为什么str==null了

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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