【发布时间】:2018-08-12 08:40:59
【问题描述】:
我有一个学校作业,要求替换 C 标准库中的标准内存分配函数。我不知道该怎么做,但这里是我的老师用来概述他的过程的简要描述。
接下来,我要#define标准的C内存分配和释放 函数将由其 memcheck 对应项替换。每个 案例,我正在查找 man 中参数的数量和名称 页面并在原始功能及其中使用它们 重新定义。此外,对于列出的论点 手册页,我也将
(underscore, underscore)FILE(underscore, underscore) and LINE(underscore, underscore)传递给替换 版本作为每个函数的最后两个参数。我正在 注意不要在两个函数中的任何一个上包含分号 #define 语句。
现在我只是在处理头文件:
#ifndef MEMCHECK_H
#define MEMCHECK_H
#include<stdlib.h>
#define malloc _memcheck_malloc
#define free _memcheck_free
#endif
这个项目的重点是用我们自己的并且在链表中使用的函数替换标准的 malloc 和 free 函数。
我最终要问的是“我如何开始定义自己的函数来替换标准函数?”我需要使用#define 方法以及上面提到的一些编译器宏。
这是我发现的另一个问题的链接,似乎是正确的答案,但我不确定。 How to replace C standard library function ?(第三个答案)。
【问题讨论】:
-
如果您认为它拥有答案 - 为什么还要为此写另一个 Q 呢?如果您不这么认为,请解释为什么不这么认为。
-
@PatrickArtner 我不知道这个答案是否正确,而且在谷歌上很难找到一个直截了当的答案。我不确定它是否正确,仅仅是因为我不完全理解如何使用#define 来替换标准函数。
-
#define不会更改库,但会将对标准函数的任何 调用 修改为调用您的函数。预处理器将free(ptr)替换为_memcheck_free(ptr),编译器甚至不知道它这样做了。 -
@BoPersson 因此,每次调用 malloc 时,#define 的第一个参数是“malloc”,第二个参数是“我正在替换 malloc 的函数的名称”,它将使用我的替换功能?所以我现在需要做的就是在我的头文件中为替换函数声明一个原型,然后创建一个函数文件来保存我的替换文件的定义。对吗?
标签: c