2017-02-04 4 views
0

コードを実行すると、ブレークポイントが発生したというエラーが表示されます。このブレークポイントがどこにあるのかはわかりません。誰も助けることができますか?Test Project.exeがブレークポイントを起動しました

void memLeak() 
{ 
    int *p = new int; 
    char * string1 = new char[20]; 
    char * string2 = new char[25]; 
    strcpy(string1, "Sheldon"); 
    string2 = string1; 
    delete string2; 
    delete string1; 
    delete p; 
} 
int main(int argc, char* argv[]) 
{ 
    memLeak(); 
    _CrtDumpMemoryLeaks(); 
    return 0; 
} 

答えて

0
  • あなたがnewを使用し、deleteを使用しています。
  • new[]を使用する場合は、delete[]を使用してください。

つまり、配列のための2つのバージョンがあります。あなたがstring2 = string1を割り当てるとき、あなたは2番目の文字列に、元のポインタを失うと、二回最初のものを削除しようとしている

delete[] string2; 
delete[] string1; 
delete p; 
  • 。ブレークポイントエラーを引き起こしているのは、この二重削除の可能性があります。

しかし、いっそのこと、std::stringを使用して、直接自分でnew/deleteを使用して心配しないでください。

+0

ありがとうございます。私はdelete []を使いましたが、まだブレークポイントのエラーが出ています。私が気づいたことの1つは、string2 = string1をコメントアウトすると、ブレークポイントエラーがなくなったということです。私はstring2 = string1を間違って使用していますか? – brisk172

+0

私はそれを見ます。ありがとうございました。 delete [] string1を削除して修正しました。ありがとうございました。 – brisk172

+0

@ brisk172 'delete [] string1''を削除すると、元の' char'配列の1つが漏れているので、問題は隠されますが、修正されないことを理解する必要があります。このようなことを間違えてしまうのはとても簡単です。なぜなら、裸の 'new' /' delete'を使わないべき理由です。 'std :: string'、' std :: vector'などのために、このものを扱う標準コンポーネントを使用してください。 – BoBTFish

関連する問題