RSF*_*on7 4 c++ stack-overflow cout segmentation-fault
以下内容发生在linux 2.6.32-220.7.1.el6.x86_64和g++ 4.4.6.
以下代码:
#include <iostream>
#include <cstdlib>
int PROB_SIZE = 10000000;
using namespace std;
int main(int argc, char *argv[]) {
unsigned int numbers[PROB_SIZE];
cout << "Generating " << PROB_SIZE << " random numbers... " << flush;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
产生以下SIGSEGV :( gdb)运行启动程序:/ home/cpd20202/sorting/error
Program received signal SIGSEGV, Segmentation fault.
0x000000000040093b in main (argc=1, argv=0x7fffffffe4f8) at error.cpp:13
13 cout << "Generating " << PROB_SIZE << " random numbers... " << flush;
Missing separate debuginfos, use: debuginfo-install glibc-2.12-1.47.el6_2.5.x86_64 libgcc-4.4.6-3.el6.x86_64 libstdc++-4.4.6-3.el6.x86_64
(gdb) where
#0 0x000000000040093b in main (argc=1, argv=0x7fffffffe4f8) at error.cpp:13
Run Code Online (Sandbox Code Playgroud)
我真的没有想法.
这是因为你的数组大于堆栈的大小.因此,当程序在函数调用期间尝试推送新内容时,程序会崩溃.
您获得的错误在概念上与堆栈溢出相同,除非它是由局部变量非常大而不是嵌套太多函数调用引起的.
堆栈是一小块内存,供管理和局部变量使用.它从来都不是很大,最多只有几兆字节.这就是为什么你需要一个动态分配来摆脱你的问题.大多数动态分配将利用堆,这通常仅受物理内存的限制.
您需要在堆上分配数组.为此,您有几个选项,其中最简单的可能是使用a std::vector<int>.它们的行为与普通阵列大致相同,并且它们的存储是自动管理的,因此这应该不是问题.
#include <vector>
#include <iostream>
int PROB_SIZE = 10000000;
using namespace std;
int main()
{
vector<int> numbers(PROB_SIZE);
cout << "Generating " << PROB_SIZE << " random numbers... " << flush;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1768 次 |
| 最近记录: |