2016-12-01 50 views
0

私はこれまで何度も検索しましたが、何も見つかりませんでした。かかわらず、入力された番号の、ダイナミックアレイは、常に割り当てられた唯一の要素を持つ、いくつかの理由ダイナミックアレイは1つの要素のみを割り当てます

#include<iostream> 

using namespace std; 

int main() { 
int *newArray; 
int size; 

cout << "enter size: "; 
cin >> size; 
newArray = new int[size]; 

cin.get(); 
return 0; 

Iは、次の簡単なコードを有しています。私はコンパイラのエラーやランタイムエラー(配列の問題以外)を取得していません。また、私は同じ結果を得る

int *newArray; 
newArray = new int[100]; 

const int SIZE = 100; 
int *newArray; 
newArray = new int[SIZE]; 

を試してみました。 違いがあれば私のIDEにはVisual Studio Community 2015を使用しています。 誰かがポインタを持っている場合(意図しない)、私に知らせてください。ありがとうございました。

+0

「1つの要素だけが割り当てられました」とはどういう意味ですか?どのようにこれを決定していますか? (また、すべての問題は 'std :: vector';と離れて行く))) –

+1

応答をありがとう。ブレークポイントを設定して実際に配列を見ると、要素が1つだけ割り当てられていることがわかります。だから配列の大きさは1です。何があっても。そして、私はベクトルを使うことができればいいと思っていますが、この場合(学校の割り当て)には配列を使用する必要があります。 – FrozenFeet

+3

@FrozenFeet問題は、デバッガのマニュアルを完全に読まなかったことです。 **すべての要素を表示するには、 'newArray'ポインタから始まる10個の要素を表示するには、' newArray、10'のようにデバッガを強制する必要があります。あなたが* 1以上の要素を割り当てているので、答えは本当に質問に合わないので、これを答えとして投稿しません。ユーザーエラー。 – PaulMcKenzie

答えて

1

newArrayは配列ではなく、メモリ内のいくつかの場所へのポインタです。それは多くの要素を含んでいません。それは単にメモリ内のアドレスです。 newArray = new int[n]を実行すると、sizeof(int)*nバイトのメモリが割り当てられ、この割り当てられた領域のアドレスはnewArrayに保存されます。

Visual Studioは、newArrayがintへのポインタであることを知っています。だから、それはちょうどそのアドレスに1つの数字を示しています。そこに割り当てられたメモリの量はわかりません。

最初にintを表示するには、メモリビューを開き、アドレスにnewArrayと入力し、intを表示するように設定します。平易なメモリが整数として解釈されるので、配列の数値が表示されます。しかし、これらの末尾には、intがありません。あなたの番号の後に、ゴミがあります。

もう1つのオプション(私はそれがうまくいかないか分かりません)は、ウォッチウィンドウに(int[100])newArrayを追加することです。

メモリが割り当てられているので、書き込んで読んで気軽にdelete[]を忘れないでください。

+0

それはそれでした。私はコンパイラから得たものを誤解していた。ご回答いただきありがとうございます。 – FrozenFeet

+1

*「[Visual Studio]はそこに割り当てられたメモリの量を知ることができません」* - 逆に、CRTの実装者であるVisual Studioでは、割り当てられたメモリの量がわかっています。この情報は、 'operator new []()'(つまり、オペレータnew []()から返されたポインタの左に格納されます。より低いアドレスに向かって)。デバッガは、この情報を表示しません。これは、自分で簡単に行うことができるためです。デバッガでポインタを配列として解釈したい場合は、変数ウォッチで 'var、[32]'構文を使って、最初の32エントリを表示します。 – IInspectable

+0

利用可能な指定子の一覧は、[C++の書式指定子](https://msdn.microsoft.com/en-us/library/75w45ekt.aspx)から入手できます。 – IInspectable

関連する問題