我在 Ubuntu 中编写了一个 C++ 程序。在主函数中,我有这样的二维数组:
int main() {
unsigned long long int s[11000][100];
// some code to manipulate with s (just for initialization)
// ...
}
并且程序无法运行。在网上搜索后,我知道二维数组的大小超过了 Ubuntu 中大约 8 MB 的默认堆栈大小。我尝试了一些建议在我的程序中自动更改堆栈大小。所以我添加了几行代码:
int main() {
unsigned long long int s[11000][100];
const rlim_t kStackSize = 32 * 1024 * 1024;
struct rlimit rl;
int result;
result = getrlimit(RLIMIT_STACK, &rl);
if (result == 0) {
if (rl.rlim_cur < kStackSize) {
rl.rlim_cur = kStackSize;
result = setrlimit(RLIMIT_STACK, &rl);
if (result != 0) {
printf("error\n");
}
} else {
printf("error\n");
}
// some code to manipulate with s (just for initialization)
// ...
} // end main
但我仍然遇到分段错误(核心转储)错误。我还检查了堆栈大小,它的大小现在是 32 MB,是二维数组大小的 4 倍。还尝试将堆栈大小设置为 RLIM_INFINITY,但再次失败。谁能帮我找出原因和解决方案?太感谢了!