• ベストアンサー

大容量をmalloc()した後にfree()

C言語でシステム開発しています。 大容量をmalloc()した後にfree()すると、プロセスが強制終了してしまいます。 malloc()のサイズが小さい場合は問題がありません。 こういった場合にプロセスが強制終了しない方法はないものでしょうか?。 ご存知の方がいらっしゃればお教えいただきたいです。 以上です。

質問者が選んだベストアンサー

  • ベストアンサー
  • sub_6
  • ベストアンサー率60% (14/23)
回答No.3

malloc() の戻り値がNULLだったりしませんか?領域不足の場合malloc()の失敗はありえます。

その他の回答 (3)

回答No.2

freeした瞬間に強制終了するとしたら、#1さんの仰るとおり、mallocからfreeするところの間のバグの感がしますね。 freeしたときに死ぬところだけ聞くと、すでにfreeしたところをfreeしている場合、ポインタが破壊されていて、関係ないところをfreeしてる場合、mallocライブラリーの管理ブロックをオーバーランして破壊している場合、freeしたブロックに書き込んでいる場合などがまず思いつきます。 valgrindなどメモリー用のデバッグツールでまずは検証してみてはいかがでしょうか?

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

malloc()直後にfree()してるだけですか? void *ptr = malloc(~); // 何もしない free(ptr); ではなく間に何らかの処理があるのなら、 それはmalloc(),free()の問題ではなくて その間の処理におそらく問題あります。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

malloc()直後にfree()してるだけですか? void *ptr = malloc(~); // 何もしない free(ptr); ではなく間に何らかの処理があるのなら、 それはmalloc(),free()の問題ではなくて その間の処理におそらく問題あります。

関連するQ&A