我最近一直在试验 Electric Fence,但我不知道如何将它与 c++ 代码一起使用。
这是一个例子:
// test.cpp
#include <cstdlib>
using namespace std;
int main()
{
int *a = new int(10);
delete a;
}
我用它编译了
g++ ./test.cpp -o test -lefence -L/home/bor/efence_x86_64/lib -lpthread
而且我在开始时没有看到 Electric Fence 横幅,并且在可执行文件中找不到 EF 符号(使用 nm 命令)。
但是,如果我像这样修改程序:
// test.cpp
#include <cstdlib>
using namespace std;
int main()
{
char *p = (char*)malloc(20);
free(p);
int *a = new int(10);
delete a;
}
一切都很好——EF 出现了。我知道它有点解决问题,我知道:)。我只是想了解为什么它一开始就不起作用,因为new()
应该调用malloc()
和delete()
调用free()
,不是吗?
我进入这个项目的原因是一个使用boost库和其他几个库的大项目。而且这个程序从不调用malloc()
或free()
直接调用。当我用 EF 构建它时,我不仅将 EF 链接到最终的可执行文件,而且重建了所有试图将 EF 链接到它们的库。而且我在其中任何一个中都找不到 EF 符号。这是正确的方法吗?或者是错误的,EF 最终应该只链接到可执行文件,库应该保持不变?但是我再次在可执行文件中找不到 EF 符号。