ウィリアムのいたずらも、ハマったし、検索しても、いろいろでてきますね。
CStringを使ったとき、strcoreでmemory leaks
けっきょく、こんな感じのケースなんですけどね。。。
1.メソッド内で
CString buf = "";
for(int i = 0 ; i <10; i ++ )
buf = buf + "a";
}
のように宣言したもので、ポインタでなく、newしたものでもない
(なので、deleteもできない。こういうのは、メソッド終了後、解放されるはず)
2.スレッド内で使っていても、強制終了されたものではない。
スレッドは、すでに終了しているのに、出る
3.文字列の連結や、format関数を使ったときに起こりやすい。
ただし、これだけのケースだけでは、ないようだ。。。
逆に、このとき、かならずなるわけでもない。
バージョンによっても(VC++ Ver6、VC++ .net)同じプログラムで、
出たり、出なかったりする
で、現象は、プログラム終了後、
strcore.cpp(118) :
で、メモリーリーク(memory leaks)がおきることがある
(かならずおきるわけではない)
原因:不明
回避策:
CStringを使わない。charの配列で、文字列を表現し、連結するときは、メモリ領域を取り直して、コピーすると、メモリーリークにならない。
うーん、これじゃあ、自動車事故を減らすには=自動車に乗らないっていうのと、おなじだな(>_<)!
もっとも、中学校のとき、「忘れ物をなくすには?」というホームルームの話し合いで、「学校に荷物をすべて置いておく。わすれない!」と提案したことがある。
「っていうことは、家で勉強しないツーことか?」とかいわれ、先生には、なぜか、反対され、その案は却下になったが、その日から、みんな学校に荷物を置くようになり、次の日から、忘れ物は激減した。。。
。。。って、関係ないか、この話(^^;)