24

我有一个非常大的数组,它的长度必须是 262144 个元素(并且将来可能会更大)。我试过像这样在堆栈上分配数组:

#define SIZE 262144
int myArray[SIZE];

但是,似乎当我尝试添加元素超过某个点时,当我尝试访问它们时值是不同的。我知道这是因为堆栈上只有有限数量的内存,而不是具有更多内存的堆。

我尝试了以下方法,但运气不佳(无法编译):

#define SIZE 262144
int *myArray[SIZE] = new int[SIZE];

然后我考虑使用malloc,但我想知道是否有更多类似 C++ 的方式来执行此操作...

#define SIZE 262144
int *myArray = (int*)malloc(sizeof(int) * SIZE);

我应该去malloc吗?

4

7 回答 7

69

你会想像这样使用 new :

int *myArray = new int[SIZE];

我还会提到这一点的另一面,以防万一......

由于您从堆栈过渡到堆,因此您还需要在完成后清理此内存。在堆栈上,内存会自动清理,但在堆上,你需要删除它,因为它是一个数组,你应该使用:

delete [] myArray;
于 2009-03-24T01:14:39.733 回答
25

更多的 C++ 方法是使用向量。然后你就不用担心完成后删除内存;矢量将为您完成。

#include <vector>

std::vector<int> v(262144);
于 2009-03-24T02:25:08.940 回答
2

new在堆上分配。

#define SIZE 262144
int * myArray = new int[SIZE];
于 2009-03-24T01:09:02.757 回答
1

由于在编译时不一定知道数字,因此类型是指针:

int *myArray = new int[262144];
于 2009-03-24T01:08:43.587 回答
1

第一次尝试失败的原因是语法不正确。试试这个:

int *myArray = new int[SIZE];
于 2009-03-24T01:09:42.913 回答
1

我相信

#define SIZE 262144
int *myArray[SIZE] = new int[262144];

应该

#define SIZE 262144
int *myArray = new int[262144];

或者更好

#define SIZE 262144
int *myArray = new int[SIZE];
于 2009-03-24T01:09:46.173 回答
1

您使用的语法new错误,应该是:

int *myArray = new int[262144];

您只需要将大小放在作业的右侧。

但是,如果您使用的是 C++,您可能希望查看使用std::vector(您将拥有)或类似的东西,boost::scoped_array以使内存管理更容易一些。

于 2009-03-24T01:10:14.550 回答