新手关于C++内存访问的一个疑问

fanchangyong 2009-05-22 10:59:57
有件事情不太明白:
比如一个int指针指向一个int数组:
int* p=new int[10];
这个数组有10个元素,但如果我们使p指向第十个元素后再++,也就是:
p+=10;
p++;
这时候假设p指向的还是一个int型的数据,可不可以通过*p取得它的值?
以上只是举个例子来描述我的想法,大体上就是指针指向的内存中的东西,是不是任何时候都可以访问到(不管合不合法)?

不知道表达得够不够清楚...
...全文
154 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjs2009 2009-05-26
  • 打赏
  • 举报
回复
从技术上讲可以访问,但得到的可能是未知值。

从面向对象思想的角度来讲,这样的做法是错误的。

楼主可以多看看面向对象以及编程规范方向的内容。
xiaoshi935 2009-05-25
  • 打赏
  • 举报
回复
访问是可以访问的,但是好像不太好。

#include <iostream>
using namespace std;

int main () {
int* p=new int[10];
p = p+9;
cout << p << endl;
p = p+1;
cout << p << endl;
}

// result
/*
003707CC
003707D0
*/

LZ可以发现呀,结果相差13*16-(12*16+12)=4,刚好是一个int型的大小,所以是可以的。
Jamy325 2009-05-25
  • 打赏
  • 举报
回复
```非法访问``系统可是毫不留情的直接给你程序判死刑``一点回旋的余地多没有``
Markerhao 2009-05-25
  • 打赏
  • 举报
回复
所以说指针很灵活,很好用,但很危险呢.....我看书也正好看到这一块,过来凑个热闹
hjjdebug 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fanchangyong 的回复:]
哦,这样做不是很危险??
用*(p+n)就可以直接修改数组外的内存?
[/Quote]
放心吧,你可以随便改,危险不大。
因为你的权限是3,别的进程你看不见,系统数据你改不了。改乱的大不了是自己的。
敢改系统的。系统会把你的程序毙掉。不通过系统调用,你干不了什么事。
dl591944556 2009-05-25
  • 打赏
  • 举报
回复
指针指向的可以访问的到。但是要注意越界问题
vandersar1203 2009-05-25
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fanchangyong 的回复:]
哦,这样做不是很危险??
用*(p+n)就可以直接修改数组外的内存?
[/Quote]
如果没有access violation的话就可以
因为可以, 所以危险
fanchangyong 2009-05-22
  • 打赏
  • 举报
回复
哦,这样做不是很危险??
用*(p+n)就可以直接修改数组外的内存?
ericming200409 2009-05-22
  • 打赏
  • 举报
回复
这就随机了,如果所指向的内存可以读的话就可以
jakqigle 2009-05-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lingyin55 的回复:]

只要给个地址,通过*p都可以取出值。非法访问时会出错。

[/Quote]
up!
lingyin55 2009-05-22
  • 打赏
  • 举报
回复
这时候假设p指向的还是一个int型的数据,可不可以通过*p取得它的值?
以上只是举个例子来描述我的想法,大体上就是指针指向的内存中的东西,是不是任何时候都可以访问到(不管合不合法)?

只要给个地址,通过*p都可以取出值。非法访问时会出错。
HelloDan 2009-05-22
  • 打赏
  • 举报
回复
指向哪里都是可以的,但取出来的结果怎样是另一回事了。楼主可以自己写一个程序试一下。
liliangbao 2009-05-22
  • 打赏
  • 举报
回复
访问是可以访问的,但做法危险~
但是有些空间是系统保护的,那就不允许访问了,是非法访问行为~
goodname 2009-05-22
  • 打赏
  • 举报
回复
其实p[10]就已经越界了。

在windows上有些内存是不能读或者不能写的,所以可能会非法。
goodname 2009-05-22
  • 打赏
  • 举报
回复
可以

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧