如何在C中找到内存地址中包含的内容?

时间:2014-10-14 00:56:12

标签: c memory-address

我在程序运行期间一直收到以下错误:

First-chance exception at 0xCCCCCCCC in Project1.exe: 0xC0000005: Access violation executing location 0xCCCCCCCC.

我认为它与特定地址无效或空有关?我只需要知道如何找到0xCCCCCCCC中包含的内容以及该变量占用的位置。

我有太多的变量要抛出并找到每个地址所以我试图找到一种方法从地址“向后”转变为变量而不是用“%p”用变量到地址的方式。

感谢。

3 个答案:

答案 0 :(得分:4)

0xCCCCCCCC是Microsoft C Runtime的Debug版本使用的幻数,以及Microsoft C编译器为调试版本生成的代码。

还有other magic numbers

0xCCCCCCCC用于标记未初始化的堆栈内存。如果您执行以下操作,您会看到类似于您的例外情况:

void test(void)
{
    void *p;
    memset(p, 0, 100);    // Pointer p is used uninitialized
}

您应该注意编译器发出的警告。很有可能它警告你,你做了一些愚蠢的事情,但是你忽略了那个警告。

答案 1 :(得分:0)

0xCCCCCCCC根本不是有效的内存位置,这就是您遇到访问冲突的原因。那里没有任何东西你可以阅读,或者这种错误不会以这种方式发生。

你所拥有的是一个无效/悬空/狂野/未初始化的指针。为了追踪这一点,你需要一个调试器或像valgrind这样的工具(如果你在Linux上,其他平台还有其他工具)。

答案 2 :(得分:0)

你做不到。在C中,在运行时不存在有关如何声明变量以及如何初始化存储器的所有信息。 “变量”是一个编译时概念,不能很好地转换为生成的程序集。您需要一个调试器一步一步地执行代码,看看哪里出错了。