在使用此系统调用之前,我是否要分配内存?

时间:2014-04-06 12:00:49

标签: memory-management operating-system free system-calls

我总是看到这个函数被调用而没有为pathdirbufname分配内存。

char *getcwd(char *path, size_t size);

struct dirent *readdir(DIR *dir);

int stat(const char *file_name, struct stat *buf);

DIR *opendir(const char *name);

为什么呢?功能分配内存吗?使用后我可以使用free()吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

它们只是伪代码示例。他们不会告诉你如何为他们分配内存,假设你知道如何做到这一点。

是的,你需要释放你分配的所有内存,否则你会有内存泄漏。

您的所有示例都需要指针,因此请指出它们是在您分配的内存上运行,而不是为您分配。

答案 1 :(得分:0)

你可以发布没有分配内存的getcwd,readdir stat和opendir调用的代码吗?

通常一些lib /系统调用希望你传递一个有效的地址,它可以是malloc或来自堆栈的内存。

例如

char file_name [] =" test&#34 ;;  struct stat buf;

stat(file_name,& buf);

- >这里buf作为引用传递,因此内核可以填充需求信息。

这里我们从堆栈传递内存。

很少有API可以使用malloc自己分配内存并将指针返回给你。一旦你做完了,你必须释放那些记忆。

示例:strdup

浏览手册页了解每次通话的详细信息。