织梦CMS - 轻松建站从此开始!

罗索

当前位置: 主页>杂项技术>VC(MFC)>

Run-Time Check Failure #2 - Stack around the variable 'cinfo

落鹤生 发布于 2014-03-01 17:15 点击:次 
之前在网上下了个MFC程序,编译成功,但是运行后出现"Run-Time Check Failure #2 - Stack around the variable 'cinfo' was corrupted.“的中断,虽然点继续好像并不影响结果,但是有这个问题还是要解决。
TAG: Stack  栈溢出  

    之前在网上下了个MFC程序,编译成功,但是运行后出现"Run-Time Check Failure #2 - Stack around the variable 'cinfo' was corrupted.“的中断,虽然点继续好像并不影响结果,但是有这个问题还是要解决。

    上网查了相关的内容,网上说的是一个数组,在使用的时候超过下标,越界后出现该中断。因为是堆栈出现问题,应该是在使用的时候操作不当。

    在我调试的程序中用到的是结构体,结构体里有指针。在一个函数里定义了结构体变量,对结构体处理的函数都是封装成库了,也看不到具体的操作,在使用到结构 体的函数结束时(执行return后)出现该中断,设断点跟踪...太复杂了看不懂哪里的问题,接着在网上找了一堆相关的中断,有的说是内存分配不 够,vs上的/RTC检查了此操作所以报错出来。

    再找了一些网站。有的说msvc在debug下为栈上自动变量周围分配了一些保护空间。如果发生栈溢出, 就会写到保护空间上去。这样, 栈溢出就能被检查出来。然后我换成Release编译(太天真了),提示说是以前版本的,无法生成*&%……%#@!*       

    继续找...有的说把“c/c++代码生成这项”的"两者(/RTC1,等同于 /RTCsu)"改为“默认值”错误会消失,在项目属性那里,我改了...完全没有变化。

    再继续找...说是发现有这样的说法“不一定在函数这个地方返回时弹出了错误,就是这个地方的原因,错误报的是堆栈遭到了破坏,所以你要查看你所有动态申 请内存的地方是否存在堆栈溢出的情况。函数返回的时候,需要检查内存中的堆栈,所以出了错误,并不代表这个函数引发的错误。还有内存空间的回收看是不是有 操作不当的情况。”。但是我的结构体操作函数都封装在库里面,看不到怎么办呢?继续看下去,发现有说到“我刚在再试了试,把bmpinfo改成类成员变量,而不是在这个函数的局部变量 ”“应该是结构体在内存字节对齐的原因  填充BITMAPINFO结构体的时候可能存在越界  我猜可能是这个    没有测试不好说”

    我按照上面的做法,试着把中断的变量定义到类中...还真没错误了。

最终解决方法我是在下面这个网址看到的:http://topic.csdn.net/u/20090506/12/121d76ad-940a-4ad6-8b93-0c0bf1d80d69.html

    由于看不到具体的结构体操作,我想应该是调的库文件的问题,因为是以前的版本,容易出现这样的错误。虽然不知道为什么可以这样解决,但是没有这个问题了,也差不多了,希望对于和我一样的新手有帮助~

(buhuizheyangba)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201403/16923.html]
本文出处:CSDN博客 作者:buhuizheyangba 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容