VC++6 DLLで呼び出すrenameについて質問です。


rename(ファイル名ポインタA、ファイル名ポインタB)
でファイル名を変更しました。

ファイル名Bはrenameを呼び出すメソッド内でmallocしたものですので、
renameを呼び出した次の行で
free(ファイル名ポインタB)としています。

このときfree(ファイル名ポインタB)の部分を実行するとなぜか
処理が落ちてしまいます。

エラーメッセージ
 Debug #Errror!
 Program:xxxxx.exe
 DAMAGE:after Normal block(#48)at x04642030
 (press Retry to debug the application)

これはどのような原因が考えられますか?
デバッグ実行してもメモリ開放していないことについて
警告するメッセージが表示されないなども気になります。
以上宜しくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2010/06/15 00:15:48
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:ko8820 No.1

回答回数1221ベストアンサー獲得回数69

ポイント100pt

mallocした領域より

ファイル名が長いという落ちは?

ファイル名の最後は\0で必要があるので、

必要とされるメモリーは文字の長さよりも長い

-----

メモリー破壊してる可能性あり

http://q.hatena.ne.jp/answer

id:harunoharuno

回答ありがとうございます。

ご指摘頂いた内容をもとに調べてみたところ

\0が文字列の中にありませんでした。

そのためfreeしたときに隣の場所まで開放されエラーになってしまったのですね

助かりました。

2010/06/09 19:11:12

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません