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

新手上路,请多包涵

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

原文由 Nick Bolton 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 476
2 个回答

你会想像这样使用 new :

 int *myArray = new int[SIZE];

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

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

 delete [] myArray;

原文由 Reed Copsey 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

 int *myArray = new int[262144];

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

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

原文由 Wilka 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题