malloc

malloc(3)を使うときはstdlib.hのインクルードを忘れずに。

gccが4.2になってwarningを出してくれて気がついた。mallocはvoid *型のポインタを返すので、明示的な型変換はいらない。

#include <stdio.h>
#include <stdlib.h>

int main(void) {
  char *str;
  str = malloc(10);
  free(str);
  return 0;
}

けっこう古い本でもちゃんと書いてるなぁ。web上で書いてるのをみても、

  str = (char *)malloc(10);

が望ましいって書いてるのもあるね。

ちゃんと#include があれば、型変換はなくてもいいってのが正解かな?僕はそこを書き忘れてたんだけど。gcc 3.4では文句を言われなかったし。gcc 4.2では、明示的な型変換があっても#include がないとwarningがでる。プロトタイプ宣言がないとint型を返すとみなされるのだそうです。