如何解决为什么我在这段代码中出现分段错误?
为什么我的第一个和第二个程序运行良好,但第三个程序出现分段错误?我不认为问题出在内存限制上,因为即使 long long dp[40][100000]
运行良好,但如果我尝试打印任何值,再次说 std::cout << dp[0][0];
它会出错。我真的很困惑,我试过在 Jdoodle 和 GDB 在线编译器上编译这段代码。两者都给出了相同的错误。
首先:
#include<iostream>
#include<vector>
int main(){
std::vector<long long> price(20);
std::vector<long long> pages(20);
return 0;
}
第二:
#include<iostream>
#include<vector>
int main(){
long long dp[20][100000];
return 0;
}
第三:
#include<iostream>
#include<vector>
int main(){
std::vector<long long> price(20);
std::vector<long long> pages(20);
long long dp[20][100000];
return 0;
}
编辑:我想知道为什么第二个程序运行良好而第三个程序出现分段错误。我认为它们要么都运行,要么都不运行而不会出现任何错误。
解决方法
这里有一些其他选项可以尝试:
int main()
{
static long long dp[20][100000];
std::cout << "Size of dp: " << sizeof(dp) << "\n";
return 0;
}
在许多平台中,函数内声明为 static
的变量被放置在不同的区域中,该区域通常比局部变量具有更大的容量。
您可以动态分配:
long long * dp = new long long [20][100000];
动态内存,也就是堆,通常容量很大,肯定比局部变量区大。
您也可以在“全局”空间中分配:
static long long dp[20][100000];
int main()
{
//...
return 0;
}
在大多数系统中,全局区域比局部变量区域(又名堆栈)大很多。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。