• ベストアンサー

部分的なメモリ解放

int *a = malloc(sizof(int)*3); free(a[1]); とした時、a[0]、a[2]は今後解放されませんか? また、a[1]は再割り当て可能ですか? または、より良い方法はありますか?

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

  • ベストアンサー
  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

そもそも構文エラーになります。 構文エラーはfree(&a[1]);とすれば回避できますが、仕様上も"malloc()の戻り値でないポインタをfree()した場合の動作は未定義"となっています。 要は「別々に管理したいのなら、別々に割り当てましょう」って事な訳ですが。

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

質問内容のコードで構文エラーが発生するとすれば、sizofの部分ではないかと思います(sizeofの間違いでしょうか?)。まあ、これも上でマクロ定義されていればエラーになるとは限りません。 C++とは異なり、Cでは、ポインタと整数は相互に暗黙的な型変換が可能です。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

free(a[1]);を呼び出した時点で未定義の動作になります。 a[1]がint型だということを考えてみてください。

関連するQ&A