如何正确打印内存中变量的地址?

时间:2019-03-08 16:06:10

标签: c++ windows memory ollydbg

我试图了解c或c ++结构如何存储在内存中。

我用c ++编写了一个小程序,然后编译并将其运行到调试器中。我使用了带有%p和&variable的printf来打印地址,但是打印出的地址和内存中的实际地址完全不同。实际上,打印的地址甚至无效。

知道如何正确打印变量或结构的真实地址吗?

谢谢

这是我编写的程序的源代码:

#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <conio.h>

#define XXX __asm__("nop");

int main(){
    XXX;
    XXX;
    const char *short_string = "this is a short string";
    const wchar_t *long_string = L"this is a long string";
    int a = 2;
    int b = 3;
    int c = a + b;
    int *pointer_to_a = &a;

    std::cout << "the address of short_string is: " << &short_string << std::endl;
    std::cout << "the address of long_string is: " << &long_string << std::endl;
    std::cout << "the address of a is: " << &a << std::endl;
    std::cout << "the address of a is: " << pointer_to_a << std::endl;
    std::cout << a << "+" << b << "=" << c << std::endl;
    std::cout << std::endl;
    XXX;
    XXX;
    getch();
    return 0;
}

这是已编译程序的输出: compiled program

这是变量在内存中的位置: debugger output

1 个答案:

答案 0 :(得分:7)

要打印字符串的位置,您需要: std :: cout <<(void *)short_string;

在您的示例中,您写出了本地变量where的地址,该地址在堆栈中