strはchar型ではないし、*strはchar型ではないか?

char *str で宣言しているなら、*strがchar型になるってことで、strは&charだ。
ポインタはふつー32bitだから、malloc(str)すると、4byte確保される。