Q malloc返回了奇怪的指针值,但我确实读了问题 7.6,并且我包含了这一行
extern void *malloc();在我调用它之前。
A malloc接受一个类型为size_t,而size_t的参数,它可能被定义为unsigned long。如果你传递的是int(甚至是unsigned int),malloc可能会接收到垃圾值(或者如果你传递一个long但size_t是int).
一般而言,通过 #include 适当的头文件来声明标准库函数,而不是自己键入extern声明,会安全得多。参见问题 7.16。
(一个相关的问题是,打印size_t值,包括sizeof来对一个字符串数组进行排序,并使用的结果,使用%f%d格式是不安全的。可移植的方法是使用显式(unsigned long)类型转换,并使用%lu格式printf("%lu\n", (unsigned long)sizeof(int))。参见问题 15.3。)
参考:ISO Sec. 7.1.6, Sec. 7.1.7