先ず、私はnew
がこれを行うC++の方法であることを知っています。私は、単にこのエラーを再現する方法が複数あることを示しています。両方とも信じられないほどイライラしています。なぜデバッガは配列ポインタの要素を1つだけ表示しますか?
私はこのソースファイルに2つの形式があります。私はまだ別のプログラミング課題をデバッグしようとしていますが、私はそれについての助けを求めていません。基本的には、サイズのフィールドとint
配列へのポインタを持つクラスとしてset
を再実装しようとしています。ここでnew
を使用したコードは次のとおりです。あまり望ましいalloc
機能使用
testnew.cpp
int main()
{
int size = 1;
int *elements = new int[size];
elements[0] = 0;
size++;
int * temp = new int[size];
for (int i = 0; i < (size - 1); i++)
{
temp[i] = elements[i];
}
delete[] elements;
temp[size] = size;
elements = temp;
elements[1] = 1;
delete[] elements;
}
と再び、:いずれの場合も
testalloc.cpp
int main()
{
int size = 1;
int * elements = (int *) malloc(sizeof(int) * size);
elements[0] = 0;
size++;
elements =(int *) realloc(elements,size * sizeof(int));
elements[1] = 1;
free(elements);
}
を、私目的は、配列を作成して、配列に追加することです。しかし、どちらの場合でも、Visual Studio 2010でビルドして実行した後、は配列がまったく拡張されず、に入る項目が1つしかありません。 VSのデバッガでは、elements
の配列ポインタを監視しています。添付されたスクリーンショットです。両方のバージョンのコードで同じです。
- ブレークポイントはdelete[]
/free()
コールです。
真剣に、私は間違っていますか?これは論理エラーでなければならず、私はmalloc
/realloc
とnew
の四十ダースの例を梳き、私の教科書を読んで再読んで、何が間違っているのか分かりません!
割り当てられたメモリを配列に分割する行があるように感じますが、new int[]
呼び出しでは行えません。
Ah!ゼロインデックス付けを呪う。それは私の問題に終わってしまいました。私はそれがわかっていましたが、デバッガで私の経験が無かったので私を捨てました。 – Tasuret