为什么 std::random_device class 成员会导致段错误?
Why does a std::random_device class member cause a segfault?
当我用 clan
g++ main.cpp && ./a.out
编译这段代码时,我得到了一个段错误 (terminated by signal SIGSEGV (Adressbereichsfehler)
)。
gcc-Version 9.3.0
clang version 9.0.1
#include <random>
struct Abra
{
float hagrid[3000000];
std::random_device voldemort{};
};
int main()
{
Abra harry = {};
return 0;
}
这是为什么?我该如何解决?我尝试的是切换 hagrid
和 voldemort
的声明顺序,但它仍然出现段错误 (Coliru example)
Why does a std::random_device class member cause a segfault?
因为你的class栈放不下,所以你在自动存储中创建实例的时候溢出了栈(多么合适;看这个网站的名字).
hagrid
数组大约为 11.4 兆字节(可能取决于 CPU 架构),大多数桌面系统上的默认堆栈大小约为 1 到 8 兆字节。
how can I fix this?
对大型对象使用动态存储。创建动态数组的最简单方法是 std::vector
.
当我用 clan
g++ main.cpp && ./a.out
编译这段代码时,我得到了一个段错误 (terminated by signal SIGSEGV (Adressbereichsfehler)
)。
gcc-Version 9.3.0
clang version 9.0.1
#include <random>
struct Abra
{
float hagrid[3000000];
std::random_device voldemort{};
};
int main()
{
Abra harry = {};
return 0;
}
这是为什么?我该如何解决?我尝试的是切换 hagrid
和 voldemort
的声明顺序,但它仍然出现段错误 (Coliru example)
Why does a std::random_device class member cause a segfault?
因为你的class栈放不下,所以你在自动存储中创建实例的时候溢出了栈(多么合适;看这个网站的名字).
hagrid
数组大约为 11.4 兆字节(可能取决于 CPU 架构),大多数桌面系统上的默认堆栈大小约为 1 到 8 兆字节。
how can I fix this?
对大型对象使用动态存储。创建动态数组的最简单方法是 std::vector
.