Nic*_*lin 5 c++ linux memory-management memory-fences electric-fence
我最近一直在尝试使用Electric Fence,我无法弄清楚如何将它与c ++代码一起使用.
这是一个例子:
// test.cpp
#include <cstdlib>
using namespace std;
int main()
{
int *a = new int(10);
delete a;
}
Run Code Online (Sandbox Code Playgroud)
我编译了它
g++ ./test.cpp -o test -lefence -L/home/bor/efence_x86_64/lib -lpthread
Run Code Online (Sandbox Code Playgroud)
而且我在开始时看不到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;
}
Run Code Online (Sandbox Code Playgroud)
一切都很好 - EF出现了.我知道它解决了这个问题,我知道:).我只是想了解为什么它首先不起作用,因为new()应该打电话malloc(),delete()打电话free(),不是吗?
我参与其中的原因是一个使用boost库和其他几个的大项目.这个程序从不打电话malloc()或free()直接打电话.当我使用EF构建它时,我不会将EF链接到最终的可执行文件,但重建了所有试图将EF链接到它们的库.我无法在其中任何一个中找到EF符号.这是正确的方法吗?或者它是错误的,EF最终只能链接到可执行文件,libs应保持不变?但是我再次在可执行文件中找不到EF符号.
| 归档时间: |
|
| 查看次数: |
8897 次 |
| 最近记录: |