【发布时间】:2017-10-07 18:21:21
【问题描述】:
我想知道所有在内部使用 malloc() 并返回指向新分配的内存块的指针的 C 标准函数。 AFAIK 有:
- strdup()
- getcwd()
- get_current_dir_name()
是这样吗?我正在编写一个复杂的解析器,它将所有 C 原始指针更改为更精细的 C++ 智能指针,我需要知道哪些地方不能自动完成。
【问题讨论】:
-
getcwd被指定(在 POSIX 规范中)不分配内存。见this officialgetcwdreference。 -
你为什么要问?为什么你想要一些与堆分配相关的详尽函数列表?
-
因为我正在编写一个复杂的解析器,它将所有 C 原始指针更改为更精细的 C++ 智能指针,我需要知道哪些地方不能自动完成。
-
这个原因应该进入你的问题。不,您将无法可靠地自动化它。一些未来的研究项目将试图解决这个问题。如果您希望我提供更多信息,请通过电子邮件与我联系(提及该问题的 URL)并详细说明您的目标。
-
一个难以自动化的 API 的一个很好的例子是 Posix 版本的
scanf,它允许字符串转换通过分配分配字符m进行选择性修改,这将自动分配一个缓冲区大小正确,将其地址存储在相应的参数中,该参数必须是char**而不是char*。由于格式字符串是一个函数参数,不一定是字符串文字,因此在某些情况下正确检测将是推测性的。
标签: c memory-management malloc free