• 栈空间溢出引起的段错误


    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创建对象也没有这个问题。

  • 相关阅读:
    vmalloc详解
    SSD 页、块、垃圾回收
    ext2文件系统
    slub分配object
    slab分配object
    ACCESS_ONCE的作用
    CFS理论模型
    代码规范
    About Me
    SDOI R2 咕咕记
  • 原文地址:https://www.cnblogs.com/ZeroTensor/p/11190900.html
Copyright © 2020-2023  润新知