zoukankan      html  css  js  c++  java
  • 应用程序发生异常 unknown software exception (0xc00000fd)...

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

    应用程序发生异常 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

    名品推荐:LongZe 薇蝶儿 魔袖

  • 相关阅读:
    <s:property>的用法(jsp获取action中的值或者方法)
    struts2 Action获取表单数据
    form标签中id和name属性的区别
    button和submit区别
    hibernate could not resolve property
    Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyExce
    宏定义#define和内联函数inline的区别
    线程绑定cpu
    posix系统线程调度-设置线程优先级
    std::lock_guard和std::unique_lock的区别
  • 原文地址:https://www.cnblogs.com/personnel/p/4584967.html
Copyright © 2011-2022 走看看