zoukankan      html  css  js  c++  java
  • 栈空间溢出引起的段错误

    int LCS(string str1, string str2){
        string str1 = "hello";
        string str2 = "world";
        int ncols = str1.length() + 1;
        int nrows = str2.length() + 1;
        int dp[1001][1001];
        return dp[0][0];
    }
    int main(){
        int res = LCS();
        return 0;
    }
    

    这段代码编译正确,但是执行后会有下面的错误:

    Program received signal SIGSEGV, Segmentation fault.

    总结段错误(Segmentation fault) (转)

    为了找出错误进行断点调试,发现每次在main中跳入LCS函数时就会发生上面的错误,错误确定在LCS内部,一开始因为刚刚跳入函数时(没有执行函数内部的一行语句)就发生上面的错误,所以我以为是传参的错误,去掉参数后问题还在,想了一个下午还是不明白。最后晚上我逐条删除LCS函数内部的代码发现了问题在这一句int dp[1001][1001]这时才猛然想起来可能发生了函数栈溢出的问题。

    google一下发现栈溢出真的会引发段错误。段错误与栈溢出

    Windows下的栈的大小大约是1MB,出错代码的dp数组的大小为

    4008004大约4MB,明显溢出。

    最后:python中好像没有栈和堆的内存区别,没有这个问题。Java只能用new创建对象也没有这个问题。

  • 相关阅读:
    vue $emit的使用
    flask config 环境变量配置
    get请求
    下载及安装
    测试用例写作
    系统测试
    测试方法
    软件质量
    测试基础
    子网掩码
  • 原文地址:https://www.cnblogs.com/ZeroTensor/p/11190900.html
Copyright © 2011-2022 走看看