应用程序发生异常 unknown software exception (0xc00000fd)... - 栈溢出(Stack overflow)

今天在写程序的时候,弹出这样的提示对话框:

应用程序发生异常 unknown software exception (0xc00000fd):

相关代码是这样,在一个函数中读取一个csv文件,先根据这个csv文件的大小,直接初始化一个变量,然后一次把整个文件读取并赋值给这个变量。

一开始测试时使用的一般都是几百K的小文件,没出现问题。当我选择一个1M多的图片时,就出现上面的问题了。

刚开始,从错误提示看,并没有提示说是: 栈溢出(Stack overflow)

经过在代码中设置断点,找到关键代码是: char csv_content_ucs[fileSize];

当文件很大时,就需要在栈上开一个很大的空间,超出系统限制,就会弹出上面的错误。

解决办法也很简单: 使和堆来存放数据就行了malloc(fileSize)

关于栈溢出(Stack overflow)的一些网上资料:

来源:http://blog.csdn.net/zhongjling/article/details/8073796

解释:

一般每个进程的栈空间是限定的。(为什么限定?去学汇编和操作系统就知道)

一般为1M或2M。

什么占用栈空间?

除去系统栈占用外,基本就是栈变量。(什么是栈变量?无语¥%*&……%¥%&)

简单来说上面那个a就是栈变量。

修改有两个办法:

一 改为堆变量:

int* pa = malloc(sizeof(int)*1000*1000);

然后可以将pa当数组用。(数组和指针在C里基本等同)

当然,不用了记得free pa。

二  修改系统限制

这个栈变量= 1000*1000*4 = 4M。(约等于)

如果这个函数不频繁调用,也不递归,一般还是可以接受。

可以修改操作系统对进程栈空间的大小限制,稍微调大一些。

ulimit查看系统的限制。(*nix系统命令。不是windows的)

当然方法二非常不值得推荐

2014-06-26

时间: 2024-08-25 18:10:15

应用程序发生异常 unknown software exception (0xc00000fd)... - 栈溢出(Stack overflow)的相关文章

unknown software exception

打开cmd 输入下面代码,回车,等跑完即解决for %1 in (%windir%\system32\*.dll) do regsvr32.exe /s %1

Eclipse发生异常Unhandled event loop exception No more handles

eclipse发生异常: org.eclipse.swt.SWTError: No more handles at org.eclipse.swt.SWT.error(SWT.java:4387) at org.eclipse.swt.SWT.error(SWT.java:4276) at org.eclipse.swt.SWT.error(SWT.java:4247) at org.eclipse.swt.widgets.Widget.error(Widget.java:468) at org

Android程序崩溃异常收集框架

最近在写Android程序崩溃异常处理,完成之后,稍加封装与大家分享. 我的思路是这样的,在程序崩溃之后,将异常信息保存到一个日志文件中,然后对该文件进行处理,比如发送到邮箱,或发送到服务器. 所以,第一步是先定义一个接口,用于在保存好日志之后的回调.代码如下: /* * @(#)CrashListener.java Project: crash * Date:2014-5-27 * * Copyright (c) 2014 CFuture09, Institute of Software, *

java异常—检查异常(checked exception)和未检查异常(unchecked exception)

网易面试要我画异常的结构图,什么是检查异常,什么是非检查异常,我当时的表情是这样的,.我看过,忘了.没办法,继续看,写博客掌握. 先来看看异常的结构图,建议你结合JDK一起看. 可以看出异常的家族势力庞大,通常我们说的异常是包括exceptio和error. Exception家族我们恐怕见的不少,但是error家族我们可能就没什么印象了,下面我来说说这两个类的区别: Error(错误):是程序无法处理的错误,表示运行应用程序中较严重问题.大多数的错误与代码编写者执行的操作无关,而是表示代码运行

Structs2 全局异常界面,发生异常均进入此界面

struts.xml  其中个界面的name  均可随机应变 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"

2019-2-21.NET中异常类(Exception)

.NET中异常类(Exception) 异常:程序在运行期间发生的错误.异常对象就是封装这些错误的对象. try{}catch{}是非常重要的,捕获try程序块中所有发生的异常,如果没有捕获异常的话,程序运行的线程将会挂掉,更严重的是这些错误有可能会直接抛给用户,让用户看到.所以说在程序的最外层必须要有捕获异常的程序.这样至少确保程序的正常运行.还有一点就是,捕获异常之后需要记录下来,这样对于我们排查问题也是有帮助的. 什么情况下,不需要捕获异常呢? 1.发生此类错误的时候,就没必要执行之后的代

程序有异常不知道咋办?来学习Java异常处理知识点和异常链机制

Java异常处理知识点和异常链机制异常处理是程序设计中一个非常重要的方面,毕竟人无完人,不可能永不犯错,程序中有异常是很正常的, Java语言在设计的当初就考虑到这些问题,提出异常处理的框架的方案,下面是我对Java异常知识和异常链的一个总结.一.Java异常的基础知识异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的.有些异常需要做处理,有些则不需要捕获处理,在编程过程中,首先应当尽可能去避免错误和异常发生,对于不可避免.不可预测的情况则在考虑异常发生时如何处理.J

JAVA之IO技术-将java程序的异常信息保存在文件中

package ioTest.io2; import java.io.FileNotFoundException; import java.io.PrintStream; import java.util.Properties; /* * 将应用程序的异常信息输出到指定的log文件中 */ public class ExceptionToFile { public static void main(String[] args) throws FileNotFoundException { int

php学习日志(5)-解决Windows Live Writer错误:WindowsLive.Writer.CoreServices.HttpRequestHelper的类型初始值设定发生异常

以前用Windows Live Writer写日志都好好的,前几天用写完日志,点击发布,突然弹出意外错误:"WindowsLive.Writer.CoreServices.HttpRequestHelper"的类型初始值设定发生异常.不知道是什么问题,百度了好久也没有找到相似的问题及解决方法,于是卸载了重新装,还是出现同样的问题,如图: 今天看到一篇博客终于解决了.解决办法为: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Ls