c++ - 如何在 C++ 中创建一个位于堆而不是堆栈的数组?

标签 c++ arrays stack malloc heap-memory

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

最佳答案

你会想像这样使用 new:

int *myArray = new int[SIZE];

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

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

delete [] myArray;

关于c++ - 如何在 C++ 中创建一个位于堆而不是堆栈的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/675817/

相关文章:

c# - 文件中其他十六进制条目的值相同

java - Java统计两个数组中匹配元素的个数以及如何生成超过100个

javascript - 如何从对象中提取这些值

memory - 如何确定最大堆栈使用量?

c++ - vector的使用+继承

python - 痛饮 C++/Python : inheritance proxy objects

c++ - 套接字程序段错误 : *** stack smashing detected ***

java - 数组和输出

c - 在 C 中从堆栈上的 Int 中正确读取 Char

objective-c - 如何不将 segue 插入导航 Controller 堆栈?