C ++分配段错误

时间:2013-02-23 18:24:38

标签: c++ arrays allocation

我有这段代码:

size_t count = new_data.size();
std::cout << "got the count: " << count << std::endl;
double g_x[count];
std::cout << "First array done\n";
double g_y[count];
std::cout << "Allocated array of size" << count << std::endl;

给了我输出:

got the count: 1506538
Segmentation fault: 11

老实说,我不明白为什么。它适用于另一个数据集,但不适用于此数据集。

3 个答案:

答案 0 :(得分:3)

你可能只是在这里得到一个堆栈溢出。尝试动态分配内存,即使用堆。

double* g_x = new double[count];
...
delete[] g_x;

更好的解决方案是使用std::vector<>

#include <vector>

...

std::vector<double> g_x(count); // Creates vector with the specified size.

答案 1 :(得分:1)

如果你想要一个动态大小的数组,你需要使用new创建它,或者使用一个STL容器。

查看Static array vs. dynamic array in C++

处的部分答案

答案 2 :(得分:1)

你的问题是在C和C ++数组中根据定义在编译时定义,所以你做的是错误的,这个代码甚至编译也很奇怪(编译器应该尖叫你)

但是,如果您需要运行时定义的数组,则应使用std::vector或手动分配内存(如果您没有特定需求,则不会推荐)

P.S。你应该检查你的编译器警告级别和详细程度,因为这段代码有严重缺陷所以它甚至不应该编译(如果你有一个非常低的警告等级因为你可以拿起它也对你不好一些糟糕的编码习惯,因为你不是故意使用语言编译器特定的扩展,这会在改变环境时让你发疯)