2016-08-24 15 views
-4

が発生します。私は、メモリダンプ(セグメンテーションフォールト)エラーを参照してください、私のオブジェクトを読み取るの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を使用してポリフィミストオブジェクトの長さを増やす必要があります。

+6

も、 'new'に割り当てられたものに'のrealloc()を使用して 'を考えてはいけない - ' new'と 'DELETE'かのいずれかを使用して...あなたがC++を学んでいるなら、実際は 'malloc()'、 'realloc()'、 'free()'などを忘れてしまいましょう。 'new'と' delete'を使いましょう。のみ!つまり、 'ベクトル 'かそれに類するものを使用できない場合です。 '(char *)" d "キャストも心配しています。コンストラクタはおそらく 'const char *'(キャストを無関係にする)を取るべきです、あるいは 'const_cast (" d ")'を使って、実行しているキャストの型を指定する必要がありますが、それをする。 –

+2

彼は 'malloc'で割り当てられたものに' realloc'を使っています。彼は 'realloc'に' obj'を渡しているだけで、 'obj'は普通のポインタしか含んでいません。 (私はキャストに同意します) –

+1

ベクトルを使用して、新しいと削除を使用しないでください。 Cスタイルのキャストの使用をやめてください。 –

答えて

2
obj = realloc(obj,12*sizeof(Perro*)); 

ポインタはreallocの後に変更されます!私のIF

+2

真実ですが、問題の一部のみです。問題の重要な部分。コードは最初の割り当てループから 'obj [9]'をリークします。他のリークもあるとは疑いがありますが、クリーンアップコードは表示されません。 'vector'を使うと多くの問題を解決できます。 –

+1

'realloc'が失敗すると、このコード行がメモリリークを引き起こします。 – immibis

+0

WHY!私がOBJ [0]と呼んでいる姿勢は常に0かNULLのポインタを返し、私は10の懐疑主義者を失うだろう!なぜ私は何をすべきでしょうか? –

0

が良くなるSHOOULD ....

Perro *obj[40]; 

perro[0] = new Perrito; 
Perro[1] = new PerritoOther; 
... 
Perro[39]... 

THEN IF THE USER WHAT TO ADD OTHER THINGS 
MY TEACHER SAID YOU MUST USE REALLOC ?! WHY,WHAT CAN I DO ? 
関連する問題