私は非常に大きな配列を持っており、長さは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
を使用する必要がありますか?
あなたはそのような新しいものを使いたいでしょう:
int *myArray = new int[SIZE];
念のため、これの反対側についても説明します。
スタックからヒープに移行するため、作業が終了したら、このメモリもクリーンアップする必要があります。スタックでは、メモリは自動的にクリーンアップされますが、ヒープでは、メモリを削除する必要があります。その配列なので、次を使用する必要があります。
delete [] myArray;
それを行うためのよりC++の方法は、ベクターを使用することです。そうすれば、完了時にメモリを削除することを心配する必要はありません。ベクトルはあなたのためにそれを行います。
#include <vector>
std::vector<int> v(262144);
new
はヒープに割り当てます。
#define SIZE 262144
int * myArray = new int[SIZE];
コンパイル時に数値が必ずしもわからないため、型はポインタです。
int *myArray = new int[262144];
私は信じている
#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];
最初の試行が機能しなかった理由は、構文が正しくないためです。これを試して:
int *myArray = new int[SIZE];
new
を使用するための構文が間違っていたため、次のようになります。
int *myArray = new int[262144];
割り当ての右側にサイズを配置するだけで済みます。
ただし、C++を使用している場合は、 std::vector
(あなたが持っているでしょう)または boost::scoped_array
メモリ管理を少し簡単にします。