2014-04-06 56 views
0

我總是看到path,dir,bufname沒有分配內存調用這個函數。在使用此係統調用之前是否需要分配內存?

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

我不明白爲什麼沒有分配內存他們的工作。 @Sandro的回答講述了一個malloc使用'getcwd()' – Maghio

+0

他刪除了答案:S – Maghio

0

你可以發佈getcwd,readdir stat和opendir而不分配內存的代碼嗎?

通常一些lib /系統調用期望你傳遞一個有效的地址,它可以從堆棧中malloc'd或內存。

例如

char file_name [] =「test」; struct stat buf;

stat(文件名,& buf);

- >這裏buf是作爲調用傳遞的,所以內核可以填充需要的信息。

這裏我們從棧中傳遞內存。

有幾個API可以使用malloc自行分配內存並將指針返回給您。一旦你完成了,你必須釋放內存。

例如:的strdup

經過man頁面上的每個呼叫的詳細信息。

相關問題