Memory management 在使用此系统调用之前,我必须分配内存吗?

Memory management 在使用此系统调用之前,我必须分配内存吗?,memory-management,operating-system,free,system-calls,Memory Management,Operating System,Free,System Calls,我总是看到调用此函数时没有为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()吗 谢谢大家! 它们只是伪代码示例。它们

我总是看到调用此函数时没有为
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()吗


谢谢大家!

它们只是伪代码示例。它们不会告诉您如何为它们分配内存,而是假设您知道如何分配内存

是的,您需要释放所有分配的内存,否则将出现内存泄漏


您的所有示例都使用指针,因此请指出它们是在您分配的内存上操作的,而不是为您分配的。

您能否发布在没有分配内存的情况下调用getcwd、readdir stat和opendir的代码

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

比如说

字符文件_name[]=“测试”; 结构统计buf

stat(文件名和buf)

->在这里,buf作为调用由一个引用传递,所以内核可以只填充需求信息

这里我们从堆栈传递内存

很少有API可以使用malloc自行分配内存并将指针返回给您。一旦你完成了,你必须释放内存

示例:strdup


查看手册页,了解有关每次呼叫的更多详细信息。

我不明白为什么没有分配内存,它们就可以工作@Sandro的回答告诉我们一个malloc使用
getcwd()
他删除了答案:s