我总是看到这个函数被调用而没有为path
,dir
,buf
和name
分配内存。
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()吗?
谢谢!
答案 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
浏览手册页了解每次通话的详细信息。