关于C语言指针读取内存地址的问题,高手请进
在内存中给每一个存活的变量一个足够大的空间来存储其值,于是该块空间的地址理应成为一个唯一值,列如已知一个int型变量num在内存中的地址为0012FF60,该变量的值为1...
在内存中给每一个存活的变量一个足够大的空间来存储其值,于是该块空间的地址理应成为一个唯一值,列如已知一个int型变量num在内存中的地址为0012FF60,该变量的值为10。
可为什么用利用指针读出来的值却不是10呢?
详解:我一共创建了2个工程,第一个工程:
#include <stdio.h>
int main(void)
{
int num=10;
printf("%d \t %p",num,&num);
getchar();
return 0;
}
然后我到debug下运行了该项目的exe文件。得到CMD窗口,内容如下
10 0012FF60(光标闪烁处)
这时num这个变量应该是在内存中存活的。
我又运行了第二个项目
#include <stdio.h>
int main()
{
int *p;
p=0x0012FF60; //指向num变量的地址
printf("%d",*p);
}
得到的结果却不是10。是一个随即的数字。请高手帮我。
补充一下,看了下面几位的回答的确感到惭愧。那么有没有什么办法可以访问到它 展开
可为什么用利用指针读出来的值却不是10呢?
详解:我一共创建了2个工程,第一个工程:
#include <stdio.h>
int main(void)
{
int num=10;
printf("%d \t %p",num,&num);
getchar();
return 0;
}
然后我到debug下运行了该项目的exe文件。得到CMD窗口,内容如下
10 0012FF60(光标闪烁处)
这时num这个变量应该是在内存中存活的。
我又运行了第二个项目
#include <stdio.h>
int main()
{
int *p;
p=0x0012FF60; //指向num变量的地址
printf("%d",*p);
}
得到的结果却不是10。是一个随即的数字。请高手帮我。
补充一下,看了下面几位的回答的确感到惭愧。那么有没有什么办法可以访问到它 展开
6个回答
展开全部
被操作系统忽悠了...
你要是在没有操作系统, 而且缓存足够小的平台上运行, 就可以得到你想要的值.
建议你补充下你应用的操作系统
如果是Windows, 你可以考虑在第二个进程中用OpenProcess先打开第一个进程. 然后就可以用ReadProcessMemory和WriteProcessMemory对第一个进程的内存进行读写
你要是在没有操作系统, 而且缓存足够小的平台上运行, 就可以得到你想要的值.
建议你补充下你应用的操作系统
如果是Windows, 你可以考虑在第二个进程中用OpenProcess先打开第一个进程. 然后就可以用ReadProcessMemory和WriteProcessMemory对第一个进程的内存进行读写
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为0x0012FF60实际是指向一个临时的缓冲区,通常是堆栈.
通常这个值只在程序运行时有效.
你的这个问题实际并不是一个问题, 而是对程序运行方式的理解还不够透彻.
如果你实在想搞清楚,建议参考一些汇编的书籍.
通常这个值只在程序运行时有效.
你的这个问题实际并不是一个问题, 而是对程序运行方式的理解还不够透彻.
如果你实在想搞清楚,建议参考一些汇编的书籍.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实对于main主函数来说,它也是一个被调函数,只不过调用它的是系统而已。楼主肯定知道在C中被调函数结束后,其定义的所有变量所占的内存是被释放的,所以再想运行另一段程序用指针指向该地址,不可能得到你所认为应该存在的值的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主这个idear应该说很不错,我也去试验了,用TC实验的,结果一样。
自己也不太解,估计是每一个进程都分配了自己的堆栈空间,所以0012FF60访问的并不和前一进程的0012FF60是同一物理地址。
自己也不太解,估计是每一个进程都分配了自己的堆栈空间,所以0012FF60访问的并不和前一进程的0012FF60是同一物理地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
windows有个api ReadProcessMemory 用这个可以访问其它进程的内存地址
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询