“System.StackOverflowException”类型的未经处理的异常处理办法

在项目中,遇到一个这样的问题:C#调用C++dll,编译正常,运行时候当调用到C++的时候,报错“System.StackOverflowException”类型的未经处理的异常

打断点,检查出现在如下代码(C++接口报错):

bool ImageProcess(string sImageName)
{uint nImg_row; //图像行数uint nImg_col; //图像列数uint Img_dat[3840 * 2160];//以下代码忽略
}

打断点调试的时候,都走不进去,搞了半天,最后无意间把uint Img_dat[3840 * 2160];屏蔽,能够正常运行了,问题就出在Img_dat这个大数组了。

  • 补充知识

在解释原因前我们先看一下一个由C/C++编译的程序占用的内存分为几个部分:

  1. 栈区(stack segment):由编译器自动分配释放,存放函数的参数的值,局部变量的值等。在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因此,能从栈获得的空间较小。
  2. 堆区(heap segment) : 一般由程序员分配释放,若程序员不释放,程序结束时可能由系统回收 。它与数据结构中的堆是两回事。堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
  3. 全局区(静态区)(data segment):全局变量和静态变量的存储区域是在一起的,程序结束后由系统释放。数据区的大小由系统限定,一般很大。
  4. 文字常量区:常量字符串就是放在这里的, 程序结束后由系统释放。
  5. 程序代码区:存放函数体的二进制代码。
  • 问题分析与解决

我们申请3840 * 2160大小的uint,每一个uint占4个字节,每个变量占用4*3840 * 2160大约是31M了,远远超过超过了栈的大小

,这么大的内存考虑动态申请,或者存储在全局静态区域,或者将vs栈内存改大。

我通过全局静态存储方法,在uint Img_dat[3840 * 2160]前面加static,问题解决

“System.StackOverflowException”类型的未经处理的异常处理办法相关推荐

  1. 异常处理--“System.BadImageFormatException”类型的未经处理的异常在 DataTest.exe 中发生

    异常处理--"System.BadImageFormatException"类型的未经处理的异常在 DataTest.exe 中发生 参考文章: (1)异常处理--"Sy ...

  2. System.BadImageFormatException”类型的未经处理的异常在 xx.exe 中发生

    System.BadImageFormatException"类型的未经处理的异常在 xx.exe 中发生 参考文章: (1)System.BadImageFormatException&q ...

  3. “System.FormatException”类型的未经处理的异常在 System.IdentityModel.dll 中发生 其他信息: 十六进制字符串格式无效。

    "System.FormatException"类型的未经处理的异常在 System.IdentityModel.dll 中发生 其他信息: 十六进制字符串格式无效. 参考文章: ...

  4. “System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生

    "System.AccessViolationException"类型的未经处理的异常在 System.Data.dll 中发生 参考文章: (1)"System.Acc ...

  5. EF异常:“System.InvalidOperationException”类型的未经处理的异常在 mscorlib.dll 中发生

    EF异常:"System.InvalidOperationException"类型的未经处理的异常在 mscorlib.dll 中发生 参考文章: (1)EF异常:"Sy ...

  6. “System.BadImageFormatException”类型的未经处理的异常在 halcondotnet.dll 中发生

    "System.BadImageFormatException"类型的未经处理的异常在 halcondotnet.dll 中发生 需要修改该工程的debug选项(该工程的属性里面) ...

  7. “System.AccessViolationException”类型的未经处理的异常在 OpenCvSharp.dll 中发生 其他信息: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏

    问题描述: 1.程序半小时前还好好的,但是,电脑突然蓝屏重启后,再打开我的程序运行时,就出现标题所写的问题: 2.网上搜索了各种方法,好像和我的问题都没关系: 解决方法: 运行前,重新生成一下,竟然好 ...

  8. “System.Data.Entity.ModelConfiguration.ModelValidationException”类型的未经处理的异常在 EntityFramework.dll 中发生

    "System.Data.Entity.ModelConfiguration.ModelValidationException"类型的未经处理的异常在 EntityFramewor ...

  9. 关于WPF 中 “System.Windows.Markup.XamlParseException”类型的未经处理的异常在 PresentationFramework.dll 中发生 异常的处理。

    关于WPF 中 "System.Windows.Markup.XamlParseException"类型的未经处理的异常在 PresentationFramework.dll 中发 ...

最新文章

  1. ATDD验收测试驱动开发
  2. 运筹学广泛的使用计算机,运筹学笔记
  3. 摘自网络--浅析UpdatePanel的partial render原理
  4. KindEditor js 路径修改及表单提交注意事项
  5. 学成在线--15.课程计划查询
  6. GBDT算法原理以及实例理解(含Python代码简单实现版)
  7. 微软windows10易升_Win10 如何摆脱易升这个流氓软件,如何拒绝每半年一次的大更...
  8. 在计算机图形学中多边形的表示方法通常有,计算机图形学复习大纲
  9. OpenCV-白平衡(灰度世界算法)
  10. 提高睡眠质量的东西,这几件东西能让你睡得香又好
  11. element-ui的upload 上传组件 照片墙当超过限定图片后隐藏上传按钮
  12. html下拉框12个月,html 如何实现一个“圆角select下拉菜单”呢?
  13. 使用Objective C建立UUID
  14. Java如何使用直接内存?
  15. 1.Hue 中运行oozie工作流执行spark 报错 local class incompatible
  16. 如何预置Android 手机 APK
  17. 美国杜克大学计算机学院,杜克大学计算机专业留学的生活经历故事
  18. html5 css3鼠标滑过效果,Hover.css纯CSS3鼠标滑过特效动画库
  19. 服务器2012系统更新后蓝屏,windows server 2012 r2 安装更新程序后反复蓝屏自动重启...
  20. 高中或高中以下如何提升学历到本科?

热门文章

  1. ABB机器人引导应用程序详解
  2. 如何更改Windows显示字体_更改系统字体
  3. iOS zlib 压缩解压
  4. 2021年挖矿电脑配置推荐
  5. 遥感技术在城市监测中的作用有哪些?
  6. python 抖音评论_新手python抖音无水印解析带详细注释
  7. Flink教程(27)- Flink Metrics监控
  8. 云原生定义解析之不可变基础设施 (immutable infrastructure)
  9. 第三届多媒体教学软件大赛比赛心得
  10. 墨尔本大学COMP10001课业解析