如果在malloc中传递float,double或even char值会发生什么

时间:2013-09-02 14:47:29

标签: c malloc

在详细研究malloc()时,我发现了这种奇怪的行为。

int *p;
p=(int*)malloc(10.45);
p=(int*)malloc(10.45f);
p=(int*)malloc('j');

程序只使用警告编译任何这些语句并返回有效地址。 这里真正的结果是什么?

4 个答案:

答案 0 :(得分:5)

在调用函数之前,所有这些值都隐式转换为size_t,就像你有一个显式的强制转换一样。浮点数被截断,'j'被解释为字符集中的数值。

答案 1 :(得分:3)

"只是警告"可能隐藏了解释。

用于将非整数类型的值转换/提升为整数的各种规则,确保malloc()获得单个size_t,即无符号整数。例如,浮点调用可能只会丢弃分数,并尝试分配10个字节。

另外,please don't cast the return value of malloc() in C

答案 2 :(得分:3)

malloc()采用size_t参数。

编译器会将10.45 / 10.45f截断为10并将'j'转换为其ASCII值(106)。

这是size_t

的隐式演员

答案 3 :(得分:2)

Malloc定义为接受整数'字节数'。

C语言定义了从其他数据类型转换为整数的规则。

我相信你可以自己解决每个价值所转化的问题。