我想知道所有在内部使用malloc()的C标准函数,并返回指向新分配的内存块的指针。 AFAIK有:
答案 0 :(得分:5)
列表是:
malloc
calloc
realloc
aligned_alloc
(C11中的新内容)您列出的所有功能都不是标准C.
答案 1 :(得分:1)
您的列表相当正确,但strdup
和getcwd
是POSIX(在C99中未标准化),get_current_dir_name
是GNU(甚至不是POSIX)。
您将找到其他函数返回一些堆分配的数据。
但是你总是应该在使用它之前阅读某些功能的文档。它将告诉您返回的值是否为堆分配(以及应该如何释放)。
某些函数采用指针的地址并可能会更改它。例如getline(3)(POSIX)或asprintf(3)或open_memstream(3)(某些分配甚至可能会发生以后)。
BTW一些标准函数如fopen
可能正在使用堆分配的内存(在fclose
时间释放)。
同样,对于您自己的库,请将它们记录得足够好,以便明确告诉谁负责free
- g(或者另外破坏)每个堆分配的指针。即使是您自己的私人功能,也请在评论中记录。
自动检测与动态堆内存分配相关的功能很困难,在一般情况下可能无法可靠地执行(参见Rice's theorem),因此做了一个有趣的研究项目。
答案 2 :(得分:1)
void* malloc (size_t size);
分配大小字节的内存块,返回指向块开头的指针。
void* realloc (void* ptr, size_t size);
更改ptr。
指向的内存块的大小
void* calloc (size_t num, size_t size);
为num个元素数组分配一个内存块,每个元素的大小都是字节长,并将其所有位初始化为零。