1. ホーム
  2. c

[解決済み] sizeof(char)とsizeof(char *)の違いについて

2022-03-03 09:30:55

質問

sizeof(char)とsizeof(char *)の違いが気になるのですが。

char *s;
s = malloc(sizeof(char*)*len + 1);

char *s;
s = malloc(sizeof(char)*len + 1);

これは同じですか?

解決方法は?

char は文字であり sizeof(char) は1と定義されます( N1570 6.5.3.4 sizeof演算子および_Alignof演算子(第4段落)

char* へのポインタ 文字と sizeof(char*) は環境に依存します。通常、32ビット環境では4個、64ビット環境では8個です。

一般的な環境では sizeof(char*) > sizeof(char) , malloc(sizeof(char*)*len + 1) よりも多くのメモリを確保する(少なくともしようとする)。 malloc(sizeof(char)*len + 1) もし len は整数のオーバーフローを起こさない程度に小さくします。