为什么同一个内存地址,不同程序读出的数值不一样?(C语言程序)
我先写了一个程序在内存中创将一个字符串,并把地址打印出来:然后我在另一个程序中把这个地址赋值给另一个指针,再把字符串打印出来但是不是原来的字符串了请问这是为什么??求大神...
我先写了一个程序在内存中创将一个字符串,并把地址打印出来:
然后我在另一个程序中把这个地址赋值给另一个指针,再把字符串打印出来
但是不是原来的字符串了
请问这是为什么??求大神解答!!! 展开
然后我在另一个程序中把这个地址赋值给另一个指针,再把字符串打印出来
但是不是原来的字符串了
请问这是为什么??求大神解答!!! 展开
6个回答
展开全部
说实话你没造成内存访问违规算你运气好。你试着输7ffe0000看看?不访问违规才怪。根据你输入的地址,这个地方一般都是进程的主线程堆栈区域,或者进程的动态堆区域。这个地方的所有内存页面都是可读可写的。而为什么同一地址在不同程序中有不同的值?因为在windows系统中你所看到的所有地址都是虚拟地址。每个进程都有完全独立的4GB虚拟地址空间,A进程的0x00300000被映射到物理页面1上,B进程的0x00300000被映射到物理页面2上。虽然他们的虚拟地址相同,但是被映射的物理页面时完全不同的。
追问
请问能不能用编程的方法把物理内存地址求出来?
追答
可以,但是即使告诉你了你也不能理解。这些东西需要你积累更多的知识才能明白。如果你有兴趣,好好琢磨琢磨页表这个东西。
展开全部
因为你这个是两个工程,不属于同一个工程内
这两个工程分配给各自变量分配的地址就不一样
这两个工程分配给各自变量分配的地址就不一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不同进程有自己的虚拟内存空间
所以不同进程的同一个虚拟地址指向的不是同一块物理内存
建议看看虚拟内存相关的资料
所以不同进程的同一个虚拟地址指向的不是同一块物理内存
建议看看虚拟内存相关的资料
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
看是什么存储区,动态存储区里地址是死的,程序变量是活的,你运行某个程序的时候变量对应该地址,你运行另一个程序的时候另一个变量对应这个地址
追问
这两个程序是同时运行的
追答
我只是举例说明,地址这东西,不是你指定的,是系统给你分配的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
两个程序,地址空间是不一样的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询