CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

内存不能为read!指针问题!帮忙~感激不尽

楼主ken4qq(ken)2006-02-20 10:34:45 在 C/C++ / C语言 提问

小弟正在学习指针,刚才编了个小程序验证学到的知识。但是编译没错,运行时出错,说某块内存不能为read!    请问我的指针出了什么问题,怎样改?  
   
  #include<iostream.h>  
  class   std  
  {  
  private:  
  struct   DATA  
  {  
  int   ID;  
  DATA   *pnext;  
  };  
   
  public:  
  void   ADD(int&);  
  void   SHOW();  
  DATA   *phead,*p;  
  };  
   
  void   std::ADD(int   &a)  
  {  
  DATA   *pnow=new   DATA;  
  pnow->ID=a;  
  if(phead==NULL)  
  {  
  phead=pnow;  
  p=pnow;  
  pnow->pnext=NULL;  
  }  
  else  
  {  
  p->pnext=pnow;  
  p=pnow;  
  pnow->pnext=NULL;  
  }  
  cout<<"SUCCESSFUL!!!"<<endl;  
  }  
   
  void   std::SHOW()  
  {  
  DATA   *ptemp;  
  ptemp=phead;  
  while(ptemp->pnext!=NULL)  
  {  
  cout<<ptemp->ID;  
  ptemp=ptemp->pnext;  
  }  
  cout<<ptemp->ID<<endl;  
  }  
   
  void   main(void)  
  {  
  std   q;  
  int   a;  
  for(int   i=0;i<6;i++)  
  {  
  cout<<"INPUT_ID:"<<endl;  
  cin>>a;  
  q.ADD(a);  
  }  
  q.SHOW();  
  } 问题点数:30、回复次数:9Top

1 楼ken4qq(ken)回复于 2006-02-20 10:44:20 得分 0

帮帮忙啊::::::Top

2 楼iamcaicainiao(老菜,长征)回复于 2006-02-20 10:51:57 得分 6

你没有构造函数。  
  建议这样。  
  class   std  
  {  
  private:  
  struct   DATA  
  {  
  int   ID;  
  DATA   *pnext;  
  };  
   
   
  public:  
  std();  
  void   ADD(int&);  
  void   SHOW();  
  DATA   *phead,*p;  
  };  
   
  std::std()  
  {  
  phead   =   NULL;  
  }Top

3 楼dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)回复于 2006-02-20 10:52:32 得分 1

void   std1::ADD(int   &a)中 p->pnext=pnow;//p没有初始化Top

4 楼iamcaicainiao(老菜,长征)回复于 2006-02-20 10:53:23 得分 0

你没有构造   函数。  
   
  if(phead==NULL)  
  {  
  phead=pnow;  
  p=pnow;  
  pnow->pnext=NULL;  
  }  
  else  
  {  
  p->pnext=pnow;  
  p=pnow;  
  pnow->pnext=NULL;  
  }  
   
  这个是有问题的呀。你的phead一开始并不指向NULL,而是随机指的,于是就出了问题。就是你没有初始化它Top

5 楼iamcaicainiao(老菜,长征)回复于 2006-02-20 10:55:47 得分 0

河马说的也是问题哦。  
  俩个你一个都没有初始化。对于变量,尤其指针,这是8好的习惯,呵呵。Top

6 楼Michael_555(Nothing)回复于 2006-02-20 11:00:09 得分 2

指针没被初始化就是用了。  
   
   
                  if(phead==NULL)//phead没有初始化为NULL,肯定不会等于NULL的。  
                  {  
  phead=pnow;  
  p=pnow;  
  pnow->pnext=NULL;  
  }  
  else  
  {  
  p->pnext=pnow;    
  p=pnow;  
  pnow->pnext=NULL;  
  }  
  Top

7 楼Mybox(卡卡西)回复于 2006-02-20 11:12:45 得分 1

必须在构造函数里先初试化指针.Top

8 楼ugg(逸学堂(exuetang.net))回复于 2006-02-20 11:20:24 得分 20

以下程序通过VC7.0测试  
  结果正确  
   
  #include   "stdafx.h"  
  #include   <fstream>  
  using   namespace::std;  
   
   
  struct   DATA//   结构体拿到外边。  
  {  
  int   ID;  
  DATA   *pnext;  
  };  
   
  class   std1   //   使用命名空间std,定义类std就会有问题,所以修改成为std1  
  {  
  public:  
  std1() //   定义构造函数,初始化指针  
  {  
  phead   =   NULL;  
  p   =   NULL;  
  }  
  ~std1()//   清除结构体数据  
  {  
  while(phead   !=   NULL)  
  {  
  DATA   *pTemp;  
  while(phead   !=   NULL)  
  {  
  pTemp   =   phead;  
  phead   =   phead->pnext;  
  free(pTemp);  
  }  
  phead   =   NULL;  
  p   =   NULL;  
  }  
  }  
  void   ADD(int&);  
  void   SHOW();  
  private:  
  DATA   *phead,*p;//   结构体指针定义为private,实现封装特性。  
  };  
   
  void   std1::ADD(int   &a)  
  {  
  DATA   *pnow=new   DATA;  
  pnow->ID=a;  
  if(phead==NULL)  
  {  
  phead=pnow;  
  p=pnow;  
  pnow->pnext=NULL;  
  }  
  else  
  {  
  p->pnext=pnow;  
  p=pnow;  
  pnow->pnext=NULL;  
  }  
  cout<<"SUCCESSFUL!!!"<<endl;  
  }  
   
  void   std1::SHOW()  
  {  
  DATA   *ptemp;  
  ptemp=phead;  
  while(ptemp->pnext!=NULL)  
  {  
  cout   <<   ptemp->ID   <<   endl;  
  ptemp=ptemp->pnext;  
  }  
  }  
   
   
  int   _tmain(int   argc,   _TCHAR*   argv[])  
  {  
  std1   q;  
  int   a;  
  for(int   i=0;i<6;i++)  
  {  
  cout<<"INPUT_ID:"<<endl;  
  cin>>a;  
  q.ADD(a);  
  }  
  q.SHOW();  
   
  system("pause");  
  return   0;  
  }  
   
  Top

9 楼ken4qq(ken)回复于 2006-02-20 11:23:23 得分 0

嗯!多谢大家帮忙!原来是没有初始化头指针!Top

相关问题

  • 特急,特急,高手帮忙,感激不尽,感激不尽!!!
  • 奇闻:Apache+Apache JServ 1.1.1+1G内存居然报内存不够,那位高友知道参数设置,把俺的1G内存都利用起来,感激不尽啊
  • 给点帮助感激不尽
  • 高手,请指点!感激不尽!
  • 送分求书 感激不尽 !!!
  • 内存 巨指针
  • Turbo c 内存 巨指针
  • 指针看内存问题?
  • Dll高手快来帮忙,感激不尽!
  • 有谁能告诉我结果和为什么?感激不尽

关键词

  • 指针
  • 函数
  • 结构
  • null
  • pnow
  • phead
  • pnext
  • 初始化
  • std
  • ptemp

得分解答快速导航

  • 帖主:ken4qq
  • iamcaicainiao
  • dragonzxh
  • Michael_555
  • Mybox
  • ugg

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo