【发布时间】:2014-01-31 18:00:47
【问题描述】:
我在 MinGW gcc 中的 malloc 和 free 有一个奇怪的问题
最好用下面的程序来说明(注意没有外部标题)
void free(void* p)
{
write(1,"called free\n",12);
}
int main()
{
}
我正在使用以下命令进行编译: gcc -g -fno-builtin test.c
运行这个程序,我希望没有输出,但是当我运行程序时,我得到以下输出:
called free
called free
called free
called free
使用 gdb,我发现 free 被调用 mingwrt-4.0.3-1-mingw32-src\mingwrt-4.0.3-1-mingw32-src\src\libcrt\misc\glob.c
有没有办法关闭它?我原以为指定 -fno-builtin 会使我的程序不希望能够调用诸如 free 之类的东西
编辑: 我应该澄清一下,我已经用 malloc 和 free 编写了自己的内存库,问题是我不希望 MinGW 调用这些函数。我也不想使用任何外部库,如 stdio 或 stdlib。
我目前已经实现了重命名我的 malloc 和 free 的简单修复,但理想情况下,我可以将它们命名为 malloc 和 free,而不必担心任何外部代码调用它们。如果有人也可以解释为什么 MinGW 甚至需要在我上面编写的简单程序中分配内存,我也会很感激。
【问题讨论】: