读书人

c/c++中的指针,该如何解决

发布时间: 2013-01-02 13:08:44 作者: rapoo

c/c++中的指针
请问有什么方法能用指针直接获取某内存的值吗?
比如:


#include<iostream>
#include<iomanip>
using namespace std;

int main(){
int *p;
p=0x22fefc;
cout<<*p<<endl;
return 0;
}



但会编译报错。。。
[解决办法]
int main(){
int *p;
p=(int*)0x22fefc;
cout<<*p<<endl;
return 0;
}
但是有些地方系不。
[解决办法]
有些内存地址是受保护的!
[解决办法]

void* pv = 0;
std::cin >> pv;
int* pi = (int*)pv;
std::cout << *pi << std::endl;

[解决办法]
引用:
C/C++ code?1234 void* pv = 0; std::cin >> pv; int* pi = (int*)pv; std::cout << *pi << std::endl;

内存没分配,直接Segmentation fault
[解决办法]
这块内存是没有分配的,虽然属于4G进程空间地址但是这个逻辑地址是不能访问的
[解决办法]
p=0x22fefc; 此处的地址应该是内存为系统内核预留的地址,别说你用*p从中取值了,就连看的权利都没有额
[解决办法]
仅供参考
MSDN98中的例子walker又名pwalk。 完整列出指定进程的内存使用情况,显示进程地址空间内容,装载哪些DLL,代码、数据、堆栈段分配在何处,可以用来检测内存泄漏,监测内存使用。
http://download.csdn.net/detail/zhao4zhong1/3667896

另外推荐使用WinHex软件查看文件或内存中的原始字节内容。

[解决办法]
引用:
仅供参考
MSDN98中的例子walker又名pwalk。 完整列出指定进程的内存使用情况,显示进程地址空间内容,装载哪些DLL,代码、数据、堆栈段分配在何处,可以用来检测内存泄漏,监测内存使用。
http://download.csdn.net/detail/zhao4zhong1/3667896

另外推荐使用WinHex软件查看文件或内存中的原始字节内容。
……
有木有linux的 大牛!
[解决办法]
引用:
请问有什么方法能用指针直接获取某内存的值吗?
比如:
C/C++ code?12345678910#include<iostream>#include<iomanip>using namespace std; int main(){ int *p; p=0x22fefc; cout<<*p<<endl; return 0;}

但会编译报错……
有些内存是系统保护的你获取不到的。。。。
[解决办法]
0x22fefc,这个地址是你随便写的,它的内容可不是你的程序有权访问的,当然出错。
[解决办法]
你在程序中的代码能访问到的内存范围仅仅局限于编译器为你程序分配的空间吧?<这个是我自己的感觉,不敢保证,希望后面的可以给评价一下。>
如果你随便写一个地址赋给一个指针变量,就可以用这个指针去访问内存的内容的话,那操作系统就没有什么安全性可言了吧。虽然内存很大,但是为执行的程序分配的还是很有限的。这里面很多是你的代码没有访问权限的,所以会错。
[解决办法]
#include <stdio.h>
#include <stdlib.h>
void main()
{

int *p = (int*)malloc(1);


*p=*(volatile unsigned int*)0x6a;
printf("%d\n",*p);
}
编译过
但地址你是无法访问的
[解决办法]


[解决办法]
引用:
请问有什么方法能用指针直接获取某内存的值吗?
比如:


C/C++ code
?



1234567891011

#include<iostream> #include<iomanip> using namespace std; int main(){ int *p; p=0x22fefc; cout<<*p<<endl; retur……



#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int *p;
p=0x22fefc; //p=(int *)0x22fefc;
cout<<*p<<endl; //
return 0; }
0x22fefc该地址要确保能用。
其实可以int a =5;
然后取地址查看a的地址,然后强转给p


[解决办法]
要编译过0x...前加上(int *)做强转。
要运行得到想要的结果,难。

读书人网 >C语言

热点推荐