prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 7.15

Q malloc返回了奇怪的指针值,但我确实读了问题 7.6,并且我包含了这一行

	extern void *malloc();
在我调用它之前。


A malloc接受一个类型为size_t,而size_t的参数,它可能被定义为unsigned long。如果你传递的是int(甚至是unsigned int),malloc可能会接收到垃圾值(或者如果你传递一个longsize_tint).

一般而言,通过 #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


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管