10-9-2009
在OpenBSD源代码树的pwd.c中,有这样一个代码片段:
int main(int argc, char *argv[])
{
/* 省略其他代码 */
char *p;
if ((p = getcwd(NULL, (size_t)0)) == NULL)
err(1, "getcwd");
(void)printf("%s\n", p);
exit(0);
}
该段代码的目的是获得当前工作目录,并打印出来。请注意getcwd的调用方式。根据OpenBSD Maunal对getcwd函数的描述:如果给第一个参数传递NULL的话,getcwd会在某个地方分配内存空间,存放当前目录的字符串,并返回指向这个字符串的指针。调用方应该在稍后调用free,释放字符串占用的内存空间。然而,在上述从OpenBSD源代码中摘抄的代码片段,并没有调用free。
不清楚代码的作者为何这样写。疏忽遗漏了,还是getcwd函数的行为有其特殊性?如果看到这的读者你了解内幕,请赐教,不胜感激!