在使用 mudflap 调试我的程序时,它报告了这个错误:
*******
mudflap violation 1 (unregister): time=1365083992.573241 ptr=0x20ce510 size=0
pc=0x7f745259d5f6
Nearby object 1: checked region begins 257B after and ends 257B after
mudflap object 0x20ce440: name=`malloc region'
bounds=[0x20cc4d0,0x20ce40f] size=8000 area=heap check=0r/0w liveness=0
alloc time=1365083992.572980 pc=0x7f745259da51
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/libmudflap.so.0(__mf_register+0x41) [0x7f745259da51]
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/libmudflap.so.0(__wrap_malloc+0xe2) [0x7f745259e752]
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/libstdc++.so.6(_Znwm+0x1d) [0x7f7452348f9d]
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/libstdc++.so.6(_Znam+0x9) [0x7f74523490b9]
number of nearby objects: 1
Neoprávněný přístup do paměti (SIGSEGV)
经过一番测试,似乎
int *a[ 1000 ];
是合法的,而
int ** a = new int * [ 1000 ];
根据 Mudflap 不合法并产生上述错误。
第一个和第二个示例之间有什么区别(如果有)?