0

小さなことだと思いますが、初期化する前に使用しようとすると、初期化エラーが発生し続けます。

#include <iostream>
using namespace std;
int main()
{
    int* ordered;

    ordered[0] = 5;
    cout << ordered[0];
    return 0;
}

おまけの質問ですが、 を使用*orderedして開始アドレスにアクセスし、配列をループできます*ordered++か?

4

2 に答える 2

5
int* ordered;
ordered[0] = 5;

ordered初期化されていないポインタです。ランダムなアドレスを指します。このようなポインターを逆参照すると、未定義の動作が発生し、プログラムがクラッシュする可能性が高くなります。
このポインターで意味のあることを行うには、有効なメモリ領域を指す必要があります。あなたはそうすることができます:

int *ordered = new[x];

現在、整数orderedを保持するのに十分な大きさのメモリ領域を指しています。xただし、使用後にメモリの割り当てを解除することを忘れないでください。

delete []ordered;       

std::vectorC++ では、動的に割り当てられた配列の代わりに を使用する方がはるかに優れていますnew []。簡単に言えば、間違いにくいstd::vectorです。

于 2013-02-08T08:48:42.220 に答える
4

問題は、 に関連付けられているメモリがないことorderedです。いくつかのオプションがあります:

  • orderedいくつかのメモリを使用に割り当てますnew[]
  • 代わりstd::vector<int>

を使用する場合vectorは、最初にメモリを割り当てるか、必要に応じてメモリを拡張するpush_backメソッドを使用できます。

于 2013-02-08T08:45:40.037 に答える