读书人

*p = 5; coutlt;lt;plt;lt;endl;程序出错解决

发布时间: 2012-06-05 13:54:06 作者: rapoo

*p = 5; cout<<*p<<endl;程序出错
#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 中出现内存错误,这是为什么?

[解决办法]
p只是个int指针,你没有给它指向一个int型内存,*p是要读它指向的对象
[解决办法]

C/C++ code
#include "Stdio.h"#include <iostream.h>int main(void){  int t=0;  int *p=&t;  *p = 5;  cout<<*p<<endl;  int a =0;  cin>>a;     return 0;}
[解决办法]
楼上说的对,p只是个指针,如果没有指向某个具体的内存会出错的
[解决办法]
*p = 5; //给指针p所指向的内存区域赋值,但p指针为空,没有指向任何内存区域~
[解决办法]
int *p = 0;该指针指向的地址是系统受保护的,作为用户是没有权限进行修改的。所以,一般会出现段错误。你可以通过malloc申请堆上的空间,然后赋值。
[解决办法]
或者int *p;
int t;
p=&t
这二者作用相同,p指向一个地址
[解决办法]
p指向为空,那把5赋到哪里去
[解决办法]
int*p = 5:
[解决办法]
探讨

int*p = 5:

[解决办法]
int *p = NULL;
那么p指向的4G虚拟空间前2G用户地址中的首个64K地址空间,这个空间是不能被访问的,只能用于指针置空来防止野指针的出现。
所以我们必须给p一个合法的内存指针。
int temp;
p = &temp;
*p = 5;
[解决办法]
这就是你的教科书中写的为什么不能对NULL地址做操作。
[解决办法]
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,企图更改这个地址里的内容,所以就会报错。
解决方法楼上已经有了。
[解决办法]
楼主代码里用的是0,我就直接用0了。

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

可以把0改成NULL再分析一遍。
[解决办法]
探讨

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

int *p=0;


右值只能为地址

读书人网 >C++

热点推荐