获取内存地址的值

时间:2014-11-10 13:52:54

标签: c++ c memory

我正在使用C ++编写文件操作项目。我试图在我的程序中打印当前进程的内存和CPU使用情况。我从here获得了一些参考帮助 但是它打印了进程使用的内存地址。我想要的只是获取该地址的内存使用值。我试图通过指针使用但没有成功。

通过执行此操作,它会打印进程的内存地址。

 printf( "\tPeakPagefileUsage: 0x%08X\n", 
                  pmc.PageFaultCount );

好的, 但后来我尝试在该地址打印该值。它给出了异常

unsigned int *jk;
*jk=pmc.PageFaultCount;
        cout<<"\n"<<jk<<"\n";

可能是我使用错误的数据类型来保存jk中的内存地址。 但我不确定,问题是什么。 PLz指导我解决这个问题

5 个答案:

答案 0 :(得分:1)

你从未分配jk(可怕的名字)。您可以使用自动存储:

unsigned int jk=pmc.PageFaultCount;

或者您可以自己分配内存:

unsigned int *jk=new unsigned int;             // or malloc for C
*jk=pmc.PageFaultCount;


// and sometime later
delete jk;                                     // or free in C

作为旁注,不要将C与C ++混淆。它们是两种不同的语言。

答案 1 :(得分:1)

声明变量jk

unsigned int *jk;

你没有初始化它,所以它的值是不确定

然后当您在下一行取消引用指针时,您有undefined behavior

分配给jk时,不应取消引用。

如果pmc.PageFaultCount本身不是指针,则需要使用address-of运算符&来获取指向它的指针。


但是,如果您想将指针打印到pmc.PageFaultCount,那么您不需要临时变量来存储它,只需打印它:

std::cout << "Pointer to PageFaultCount = " << static_cast<void*>(&pmc.PageFaultCount) << '\n';

答案 2 :(得分:1)

是什么让你觉得这是一个指针? PROCESS_MEMORY_COUNTERS包含计数,而不是地址。

像这样使用:

std::cout << "Page fault count: " << pmc.PageFaultCount << std::endl;

答案 3 :(得分:0)

我不知道在C++

的情况下构建的C#c
unsigned int *jk;
*jk=pmc.PageFaultCount;

会给出段错误,因为此处jk未初始化。

相反,你可以做

unsigned int *jk = malloc(sizeof(int));
*jk=pmc.PageFaultCount;

答案 4 :(得分:0)

问题似乎与格式说明符有关:

printf( "\tPeakPagefileUsage: 0x%08X\n", pmc.PeakPagefileUsage );

尝试使用

printf( "\tPeakPagefileUsage: 0x%08d\n", pmc.PeakPagefileUsage );

第一种是以十六进制(基数为16)格式打印,但您可能希望以十进制(基数为10)格式打印。

编辑:或者更好地使用%64d 打印64位整数。