*p = 5; cout<<*p<

javaca88 2012-05-16 04:11:10
#include "Stdio.h"
#include <iostream.h>
int main(void)
{
int *p=0;
*p = 5;
cout<<*p<<endl;
int a =0;
cin>>a;
return 0;
}
在VC++ 6.0 中出现内存错误,这是为什么?
...全文
500 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
renwotao2009 2012-05-19
  • 打赏
  • 举报
回复
int *p = NULL;
那么p指向的4G虚拟空间前2G用户地址中的首个64K地址空间,这个空间是不能被访问的,只能用于指针置空来防止野指针的出现。
所以我们必须给p一个合法的内存指针。
int temp;
p = &temp;
*p = 5;
nadyhuayue 2012-05-19
  • 打赏
  • 举报
回复
空指针操作,楼主C语言基础不牢。
zslInSz 2012-05-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

LZ这一句有错误:
C/C++ code

int *p=0;


右值只能为地址
[/Quote]

0就是NULL 啊,这个问题的错误是指针开始指向了0x00000000地址,地址指向错误。
jiligululalala 2012-05-19
  • 打赏
  • 举报
回复
楼主代码里用的是0,我就直接用0了。

平时用指针,都是用NULL的,NULL的宏定义是
#define NULL ((void*)0)

可以把0改成NULL再分析一遍。
「已注销」 2012-05-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

int *p = 0; 这是定义的时候赋值,最好分成两部分来理解

1、int *p; 先定义了一个int型指针
2、p = 0; 再用0给p赋值,就是p所指向的地址是0



而单独的一个
*p = 5; 是赋值,把数字5赋值给*p,是p所指的那块内存。


第一句int *p=0,已经将p指向了一个受保护的地址,这个地址的内容是无法改写的。
第二句*p ……
[/Quote]
ls的这一句int *p=0;的分析我有点疑问:
1)p是一个int型的指针;
2)p里面存放的是0的地址,然后改指针指向0(个人觉得好像是这样的)
后面的ls分析得很好,受教了!哈哈
「已注销」 2012-05-19
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

int *p = 0; 这是定义的时候赋值,最好分成两部分来理解

1、int *p; 先定义了一个int型指针
2、p = 0; 再用0给p赋值,就是p所指向的地址是0



而单独的一个
*p = 5; 是赋值,把数字5赋值给*p,是p所指的那块内存。


第一句int *p=0,已经将p指向了一个受保护的地址,这个地址的内容是无法改写的。
第二句*p ……
[/Quote]
ls的有一句话我有点疑问。就是关于int *p=0;ls分两部分来理解,我觉得好像有点问题,
1)p是一个int型的指针
2)p里面存放的是0的地址,然后改指针指向0(个人觉得应该这样理解)
后面ls分析的很好!受教了!
jiligululalala 2012-05-19
  • 打赏
  • 举报
回复
int *p = 0; 这是定义的时候赋值,最好分成两部分来理解

1、int *p; 先定义了一个int型指针
2、p = 0; 再用0给p赋值,就是p所指向的地址是0



而单独的一个
*p = 5; 是赋值,把数字5赋值给*p,是p所指的那块内存。


第一句int *p=0,已经将p指向了一个受保护的地址,这个地址的内容是无法改写的。
第二句*p = 5,企图更改这个地址里的内容,所以就会报错。
解决方法楼上已经有了。
vbb2008 2012-05-19
  • 打赏
  • 举报
回复
我的基础也不扎实啊,看了后面的解释才明白
半人马座星星 2012-05-19
  • 打赏
  • 举报
回复
#include "Stdio.h"
#include <iostream.h>
int main(void)
{

int b=0;
int *p=0;
p = &b;
cout<<*p<<endl;
return 0;
}

cbzjzsb123 2012-05-19
  • 打赏
  • 举报
回复
这就是你的教科书中写的为什么不能对NULL地址做操作。
mars_man 2012-05-19
  • 打赏
  • 举报
回复
这就是你的教科书中写的为什么不能对NULL地址做操作。
菜头叔 2012-05-18
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

int*p = ﹠5:
[/Quote]

哥哥,可以这样玩么?
int n=5;
int *p=&n;
screwzm 2012-05-18
  • 打赏
  • 举报
回复
int*p = ﹠5:
wint_t 2012-05-16
  • 打赏
  • 举报
回复
p指向为空,那把5赋到哪里去
「已注销」 2012-05-16
  • 打赏
  • 举报
回复
LZ这一句有错误:

int *p=0;

右值只能为地址
CCWinner 2012-05-16
  • 打赏
  • 举报
回复
或者int *p;
int t;
p=&t
这二者作用相同,p指向一个地址
xujin_ 2012-05-16
  • 打赏
  • 举报
回复
指针没有指向
自信男孩 2012-05-16
  • 打赏
  • 举报
回复
int *p = 0;该指针指向的地址是系统受保护的,作为用户是没有权限进行修改的。所以,一般会出现段错误。你可以通过malloc申请堆上的空间,然后赋值。
peng_weida 2012-05-16
  • 打赏
  • 举报
回复
*p = 5; //给指针p所指向的内存区域赋值,但p指针为空,没有指向任何内存区域~
W170532934 2012-05-16
  • 打赏
  • 举报
回复
楼上说的对,p只是个指针,如果没有指向某个具体的内存会出错的
加载更多回复(2)

64,646

社区成员

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

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