3

我有这个代码:

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

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

4

3 回答 3

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.
于 2013-02-23T18:28:05.890 回答
1

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

看看静态数组与 C++ 中的动态数组的一些答案

于 2013-02-23T18:28:33.460 回答
1

您的问题是,在 C 和 C++ 中,数组是在编译时定义的,所以您所做的事情是错误的,而且这段代码甚至可以编译很奇怪(编译器应该对您大喊大叫)

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

PS你应该检查你的编译器警告级别和详细程度,因为这段代码有严重的缺陷,所以它甚至不应该编译(如果你的警告级别非常低,这对你也不利,因为你可能会养成一些不好的编码习惯,因为你正在使用不知情的编译器特定的语言扩展,这会让你在改变环境时发疯)

于 2013-02-23T18:41:24.183 回答