我在 amd64 架构上。以下代码在“if”语句中被 g++ 编译器拒绝:
void * newmem=malloc(n);
if(newmem==0xefbeaddeefbeadde){
带有错误消息:
error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
我似乎找不到让它运行所需的魔法咒语(而且我不想使用 -fpermissive)。任何帮助表示赞赏。
背景:我正在寻找一个丑陋的错误,它在某些 STL 新操作中请求内存时使我的程序崩溃(至少 gdb 告诉我)。认为它可能是分配的内存块之一的一些内存溢出,不幸的是,与操作系统用来管理我的程序的内存列表的内存相邻,我迅速覆盖了 new(),new 加上它们的删除对应的例程增加了内存围栏;虽然应用程序仍然崩溃(所有围栏都完好无损(叹气)),但 gdb 现在告诉我:
Program received signal SIGSEGV, Segmentation fault.
0x0000000000604f5e in construct (__val=..., __p=0xefbeaddeefbeadde, this=<optimized out>)
at /usr/include/c++/4.6/ext/new_allocator.h:108
108 { ::new((void *)__p) _Tp(__val); }
我注意到指针__p的值是我用于我的一个内存栅栏 (0xdeadbeef) 的值的指针表示,因此我希望在我的 new() 中更早地捕捉到这一点,以尝试在我的程序。
附加说明:它崩溃的函数在崩溃之前完美地运行了几百万次(与几十个其他例程混合在一起,这些例程也都运行了几千到几百万次),使用 valgrind 似乎不是一个选项 atm,因为它需要我的程序崩溃前 6 小时和 11 Gb。