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