栈空间溢出引起的段错误

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

posted on 2019-07-15 19:27  Frank_Allen  阅读(326)  评论(0编辑  收藏  举报

导航