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++ のより多くの方法は、ベクトルを使用することです。そうすれば、完了時にメモリを削除することを心配する必要はありません。vector がそれを行います。

#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(使用する予定の) using などを検討することをお勧めします。boost::scoped_array

于 2009-03-24T01:10:14.550 に答える