が発生します。私は、メモリダンプ(セグメンテーションフォールト)エラーを参照してください、私のオブジェクトを読み取るのrealloc()は、私はこのコードを持ってセグメンテーションフォールト
Perro **obj = NULL;
obj = (Perro**)malloc(10*sizeof(Perro*));
for (int i = 0; i < 10; i++)
{
obj[i] = new Perrito((char*)"d",i);
}
realloc(obj,12*sizeof(Perro*));
for (int i = 9; i < 12; i++)
{
obj[i] = new Perrito((char*)"d",i);
}
for (int i = 0; i < 12; i++)
{
Perrito *p;
p = (Perrito*)obj[i];
cout << p->getEdad() << endl;
}
。 realloc
行をコメントアウトし、最後の長さアイテムを減らすと正常に機能しますが、realloc
を使用してポリフィミストオブジェクトの長さを増やす必要があります。
も、 'new'に割り当てられたものに'のrealloc()を使用して 'を考えてはいけない - ' new'と 'DELETE'かのいずれかを使用して...あなたがC++を学んでいるなら、実際は 'malloc()'、 'realloc()'、 'free()'などを忘れてしまいましょう。 'new'と' delete'を使いましょう。のみ!つまり、 'ベクトル 'かそれに類するものを使用できない場合です。 '(char *)" d "キャストも心配しています。コンストラクタはおそらく 'const char *'(キャストを無関係にする)を取るべきです、あるいは 'const_cast (" d ")'を使って、実行しているキャストの型を指定する必要がありますが、それをする。 –
彼は 'malloc'で割り当てられたものに' realloc'を使っています。彼は 'realloc'に' obj'を渡しているだけで、 'obj'は普通のポインタしか含んでいません。 (私はキャストに同意します) –
ベクトルを使用して、新しいと削除を使用しないでください。 Cスタイルのキャストの使用をやめてください。 –