2016-05-09 2 views
0

元のポインタを削除するのと同じ方法でコピーしたポインタを削除していますか?上記のコードでコピーしたポインタを削除する

int * a = new int; 
*a = 8; 
int *b = a; 
delete b; 

bを削除した後、私はまだaを削除する必要がありますか?私はとの問題を抱えている実際のコードで

、私は私のコードが間違っているものを、

std::vector<ifstream * >Infiles(5); 
for (int i = 0; i < 5; ++i){ 
    ifstream * ptr = new ifstream; 
    (*ptr).open(file_names[i].c_str()); 
    Infiles[i] = ptr; 
} 

/* doing a bunch of reading with Infiles */ 

for (int i = 0; i < Infiles.size(); ++i){ 
      delete Infiles[i]; // this part crashes 
      Infiles[i] = NULL; 
} 

しかし、クラッシュの原因となるdelete Infiles[i];行をしましたか?

+0

「/ * Infiles */'コードで読書をしていることをコメントアウトしてください。コードはまだクラッシュしますか? – PaulMcKenzie

答えて

1

はい、あなたは間違いありません。ポインタを使用して削除すると、削除されたオブジェクトを参照するすべてのポインタが無効になります。このような問題を避ける最良の方法は、C++コードで所有しているポインタの使用をやめることです。ところで

、この事実は、それらを削除した後でないnullptrからセットポインタへの最良の理由である - それは同じポインタの他のコピーに何もしませんので、コードは任意のより安全なことはありません。

関連する問題