我听说有一些特殊地址(或者,至少有一些带有特殊地址的范围),用于Linux(或gcc,我不知道,这是问题的一部分),但我可以找不到这样的。我甚至不知道如何寻找它。
(例如,在Visual Studio中,对未初始化的变量有这样的事情)
这个问题是由更具体的问题“引入”(它不应该是一个单独的问题,这就是为什么我会在这里问它):是0x30303030一些特殊地址还是什么?
因为我有类似的回溯:
#0 0x003fa527 in memset () from /lib/tls/libc.so.6 #1 0x4e5fffa0 in ?? () #2 0x00787d13 in std::num_put > >::_M_group_int () from /usr/lib/libstdc++.so.6 #3 0x0079a1e4 in std::operator, std::allocator > () from /usr/lib/libstdc++.so.6 #4 0x30303030 in ?? () #5 0x30303030 in ?? () ... #1483 0x30303030 in ?? () #1484 0x30303030 in ?? () Cannot access memory at address 0xb3927000
这有1400多行,如0x30303030 in ?? ()
这是否意味着什么,或者它只是一个随机的内存地址,它看起来像一个无底的递归?问题是,我无法重现它,所以调试或使用valgrind变得无用:\
我知道,这是一个非常糟糕的问题,没有任何有用的信息,但我决定尝试一下。
答案 0 :(得分:1)
在ASCII中它是“0000”,所以可能是某些东西被覆盖了。或者某处存在内存错误。
答案 1 :(得分:0)
调试器通常使用它来标记未初始化的指针。地址本身是无关紧要的,并且没有任何特殊之处。 GCC下可能不存在这样的事情,取决于他们如何选择编写调试器。
答案 2 :(得分:0)
在回溯的顶部看到memset,有很高的可能性,它没有设置你期望的确切内存区域。也许有点太多被设置为'0'?