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.
为了找出错误进行断点调试,发现每次在main中跳入LCS函数时就会发生上面的错误,错误确定在LCS内部,一开始因为刚刚跳入函数时(没有执行函数内部的一行语句)就发生上面的错误,所以我以为是传参的错误,去掉参数后问题还在,想了一个下午还是不明白。最后晚上我逐条删除LCS函数内部的代码发现了问题在这一句int dp[1001][1001]
这时才猛然想起来可能发生了函数栈溢出的问题。
google一下发现栈溢出真的会引发段错误。段错误与栈溢出
Windows下的栈的大小大约是1MB,出错代码的dp数组的大小为
4008004大约4MB,明显溢出。
最后:python中好像没有栈和堆的内存区别,没有这个问题。Java只能用new创建对象也没有这个问题。