#include <stdio.h> int main() { int* p = (int*)malloc(sizeof(int)); *p = 5; printf("%d\n" , *p); free(p); return 0; }(学校で使っている教科書のソースコードを今回の質問に合わせたものです)
malloc,free関数を使っているのにインクルードしているのがstdio.hだけなので
これを疑問に思い教授に質問してみました。
すると、処理系によるよと答えていただけたのですが、そうなのでしょうか?
私は、処理系によるというのを
処理系によっては標準ライブラリ関数が宣言されているヘッダファイルが違うことがある
と解釈したのですが、こういうことはあるのでしょうか?
とりあえず納得して帰ったのですが、自宅で上記コードをコンパイルしてみると
error C3861: 'malloc': 識別子が見つかりませんでした
error C3861: 'free': 識別子が見つかりませんでした
というエラーが出ました。
(Vista VC++2008EE です)
処理系による、ということはたまたまVC++がコンパイルできないだけ
なのかもしれませんが、やっぱりなんだかすっきりしません。
私なりに調べてみましたが、stdlib.hが必要と書いてあるところばかりでした。
(サイトによってはmalloc.hも)