适用于malloc的正确论据

rps*_*sml 2 c

我总是使用这个malloc函数,例如,

int size = 10000;
int *a;
a = malloc(size * sizeof(int));
Run Code Online (Sandbox Code Playgroud)

我最近遇到了丢弃该sizeof(int)部分的一段代码,即

int size = 10000;
int *a;
a = malloc(size);
Run Code Online (Sandbox Code Playgroud)

第二个代码似乎工作正常.

我的问题是,哪种形式是正确的?如果是第二种形式,我是否用第一种形式分配不必要的空间.

Fre*_*Foo 6

参数to malloc是要分配的字节数.如果您需要一个n类型元素数组的空间T,请调用malloc(n * sizeof(T)).malloc不了解类型,它只关心字节.

唯一的例外是当你为(byte/char)字符串分配空间时,sizeof可以省略,因为sizeof(char) == 1在C中的定义.做类似的事情

int *a = malloc(10000);
a[9000] = 0;
Run Code Online (Sandbox Code Playgroud)

现在似乎可以工作,但实际上利用了未定义的行为.