小さなことだと思いますが、初期化する前に使用しようとすると、初期化エラーが発生し続けます。
#include <iostream>
using namespace std;
int main()
{
int* ordered;
ordered[0] = 5;
cout << ordered[0];
return 0;
}
おまけの質問ですが、 を使用*ordered
して開始アドレスにアクセスし、配列をループできます*ordered++
か?
小さなことだと思いますが、初期化する前に使用しようとすると、初期化エラーが発生し続けます。
#include <iostream>
using namespace std;
int main()
{
int* ordered;
ordered[0] = 5;
cout << ordered[0];
return 0;
}
おまけの質問ですが、 を使用*ordered
して開始アドレスにアクセスし、配列をループできます*ordered++
か?
int* ordered;
ordered[0] = 5;
ordered
初期化されていないポインタです。ランダムなアドレスを指します。このようなポインターを逆参照すると、未定義の動作が発生し、プログラムがクラッシュする可能性が高くなります。
このポインターで意味のあることを行うには、有効なメモリ領域を指す必要があります。あなたはそうすることができます:
int *ordered = new[x];
現在、整数ordered
を保持するのに十分な大きさのメモリ領域を指しています。x
ただし、使用後にメモリの割り当てを解除することを忘れないでください。
delete []ordered;
std::vector
C++ では、動的に割り当てられた配列の代わりに を使用する方がはるかに優れていますnew []
。簡単に言えば、間違いにくいstd::vector
です。
問題は、 に関連付けられているメモリがないことordered
です。いくつかのオプションがあります:
ordered
いくつかのメモリを使用に割り当てますnew[]
std::vector<int>
にを使用する場合vector
は、最初にメモリを割り当てるか、必要に応じてメモリを拡張するpush_back
メソッドを使用できます。