我正在使用C ++编写文件操作项目。我试图在我的程序中打印当前进程的内存和CPU使用情况。我从here获得了一些参考帮助 但是它打印了进程使用的内存地址。我想要的只是获取该地址的内存使用值。我试图通过指针使用但没有成功。
通过执行此操作,它会打印进程的内存地址。
printf( "\tPeakPagefileUsage: 0x%08X\n",
pmc.PageFaultCount );
好的, 但后来我尝试在该地址打印该值。它给出了异常
unsigned int *jk;
*jk=pmc.PageFaultCount;
cout<<"\n"<<jk<<"\n";
可能是我使用错误的数据类型来保存jk中的内存地址。 但我不确定,问题是什么。 PLz指导我解决这个问题
答案 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位整数。