• 締切済み

malloc(0)でNULLが返された

malloc(0)でNULLが返されました。 これはエラーが起きたということですよね? buf=malloc(0);は普通は正常に処理されて正常なアドレスが返されるはずですよね? なぜNULLが返されたんでしょうか?

みんなの回答

  • hope10
  • ベストアンサー率48% (17/35)
回答No.5

質問内容が変遷しているようですね。 >malloc(0)がNULLを返すということが書かれているペー >ジをこ存じでしたら教えてください。 古株の方は良くご存知の LSI C-86 MAN に明記されていました。 以下抜粋: ----------------------------------------------- LSI C-86 Reference Manual MALLOC(3)  ...中略... size に0を指定するとfree(ptr)と同じ動作をし、 ptrが指す領域を開放したうえで値NULLを返します。 ----------------------------------------------- 確認したければダウンロードして下さい。

参考URL:
http://www.vector.co.jp/soft/maker/lsi/se001169.html
すると、全ての回答が全文表示されます。
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.4

標準Cの規格書については、下記参考URLから「X3010」でJIS検索してください。 mallocに関しては、7.20.3および7.20.3.3を参照してください。 要求されたサイズが0の場合は処理系定義で、NULLを返すか0でないサイズを要求した場合の動作のいずれかであることが明記されています。

参考URL:
http://www.jisc.go.jp/
すると、全ての回答が全文表示されます。
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

#2>malloc(0)がNULLを返すということが書かれているページをこ存じでしたら教えてください。 参考URLにもそう書かれていました。 規格書の中の参照ページも書かれています。 結局の処規格書を見ないといけないわけですが、 規格書は有料で配布されているものですので、ネット上でまんま載ってる所はないんじゃないかと思います。 規格書を手に入れるには、 は同じく参考URLの11.2に書かれています。

参考URL:
http://www.kouno.jp/home/c_faq/c11.html#26
すると、全ての回答が全文表示されます。
  • jgk
  • ベストアンサー率75% (104/138)
回答No.2

malloc(0)は、NULLを返すか、同じように処理をしてポインタを返すのどちらかと仕様で決まっています。どちらを返すかは処理系依存です。

yuyata
質問者

補足

ありがとうございます。 malloc(0)がNULLを返すということが書かれているページをこ存じでしたら教えてください。

すると、全ての回答が全文表示されます。
回答No.1

0バイトのメモリを確保・・・メモリを確保していない。 だから、NULLなのでは? 仮に、どこかのアドレスが返ってきても、そのアドレスには書き込めないのだから。(∵0バイトしかメモリを確保していない)

すると、全ての回答が全文表示されます。

関連するQ&A