ここにはGCC
コンパイラ用に書いたコードがあります。次のようにmalloc()の面白い振る舞い
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *p;
p = (int *)malloc(9 * sizeof(char));
p[0] = 2147483647;
p[1] = 2147483647;
p[2] = 1025;
printf("%d, %d, %d, %d\n", sizeof(char), *(p), *(p+1), *(p+2));
}
出力は次のようになります。
1, 2147483647, 2147483647, 1025
私の質問は、私はポインタにのみ9バイトを割り当てられていますが、すべての12バイトを使用しているようだ、です。 (int *)の代わりに(char *)
をキャストした場合、結果は同じです(コンパイラの警告はありません)。 malloc()
の割り当てはフルサークルですか?すなわち、割り当てられたものに関係なく、ポインタのデータ型の倍数で常に割り振られますか?それとも具体的な実装ですか?
バイト単位で指定する必要がありますか? PS - キャストは必要ありません。 –
あなたは何か違法な行為をしており、気付いたことはありません。それはそれを合法にしますか? –
ありがとうございます。私は –