如何在C ++中创建一个数组而不是堆栈?

时间:2009-03-24 01:06:03

标签: c++ arrays stack malloc heap

我有一个非常大的数组,其长度必须为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吗?

7 个答案:

答案 0 :(得分:44)

你会想要使用像这样的新东西:

int *myArray = new int[SIZE];

我还会提到另一方面,以防万一......

由于你从堆栈转换到堆,你还需要在完成它后清理这个内存。在堆栈上,内存将自动清理,但在堆上,您需要删除它,并且由于它是一个数组,您应该使用:

delete [] myArray;

答案 1 :(得分:23)

更多C ++的做法是使用vector。然后你不必担心在你完成后删除内存;矢量会为你做。

#include <vector>

std::vector<int> v(262144);

答案 2 :(得分:1)

由于编号时未必知道该数字,因此类型为指针:

int *myArray = new int[262144];

答案 3 :(得分:1)

new在堆上分配。

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

答案 4 :(得分: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];

答案 5 :(得分:0)

第一次尝试不起作用的原因是语法不正确。试试这个:

int *myArray = new int[SIZE];

答案 6 :(得分:0)

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

int *myArray = new int[262144];

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

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