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

这是一个队列的操作!出错原因是CString!哪位高手帮忙解决,谢谢!!!

楼主whocantellmewhy(天堂浪人)2003-09-01 20:46:04 在 专题开发/技术/项目 / 数据结构与算法 提问

#include   "stdafx.h"  
  #include   "StructTest.h"  
   
  #ifdef   _DEBUG  
  #define   new   DEBUG_NEW  
  #undef   THIS_FILE  
  static   char   THIS_FILE[]   =   __FILE__;  
  #endif  
   
  /////////////////////////////////////////////////////////////////////////////  
  //   The   one   and   only   application   object  
   
  using   namespace   std;  
   
  typedef   struct  
  {  
  int   GameType;  
  long   LoginTime;  
  short   Status;  
  CString   Player;     //改用char[10]时正确  
  }GamePairsInfo,*PGamePairsInfo;  
   
  typedef   struct   Node  
  {  
  GamePairsInfo   info;  
  struct   Node *link;  
  }QueueNode,   *PQNode;  
   
  typedef   struct  
  {  
  PQNode first;  
  PQNode rear;  
  }LinkQueue,   *PLinkQueue;  
   
   
  PLinkQueue     CreateEmptyQLink()  
  {    
  PLinkQueue   plqu;  
        plqu   =   (LinkQueue   *)malloc(sizeof(LinkQueue));  
        if   (plqu!=NULL)  
  {  
  plqu->first   =   NULL;  
  plqu->rear     =   NULL;  
  }  
        else printf("Out   space!!   \n");  
        return     plqu;  
  }  
   
  void     EnQLink(   PLinkQueue   plqu,   GamePairsInfo   *GPInfo)  
  {    
  QueueNode   *p;  
  p   =   (QueueNode   *)malloc(sizeof(QueueNode));  
  if   (p==NULL)  
  printf("out   of   space!");  
  else{  
  printf("PASS0!\n");  
  strcpy(p->info.Banker,GPInfo->Banker);  
  printf("PASS1!\n");  
  p->info.GameType     =   GPInfo->GameType;  
  p->info.LoginTime   =   GPInfo->LoginTime;  
  printf("PASS2!\n");  
                                      p->info.Player   =   GPInfo->Player;       //运行时这里出错!!!!!  
  p->info.Status   =   GPInfo->Status;  
  printf("PASS3!\n");  
  p->link   =   NULL;  
  if   (plqu->first   ==   NULL)  
  {    
  plqu->first   =   p;  
  plqu->rear   =   p;  
  }  
      else  
  {    
  plqu->rear->link   =   p;  
      plqu->rear   =   p;  
  }  
  }  
  printf("PASS!\n");  
  }    
   
   
  int   IsEmptyQLink(   PLinkQueue   plqu   )  
  {        
  return   (plqu->first   ==   NULL);  
  }  
   
   
  void   DeQLink(   PLinkQueue   plqu   )  
  {  
  Node     *p;  
      if(   plqu->first   ==   NULL   )  
  printf(   "Empty   queue.\n   "   );  
      else{    
  p   =   plqu->first;  
  plqu->first   =   plqu->first->link;  
  free(p);  
  }  
  }  
   
  void   main()  
  {  
  printf("size   is:%d\n",sizeof(GamePairsInfo));  
   
  PLinkQueue   plinkq   =   CreateEmptyQLink();  
   
  GamePairsInfo   GPInfo;  
   
  GPInfo.Player         =   "131";  
  GPInfo.GameType     =   102;  
  GPInfo.LoginTime   =   111111;  
  GPInfo.Status         =   1;  
   
  EnQLink(plinkq,&GPInfo);  
   
  }  
   
  //编译通过,运行时出错  
  //不知原因何在?请教高手指出出错的原因!!!  
  //程序中我已经标出出错的位置 问题点数:0、回复次数:1Top

1 楼happy__888([顾问团]寻开心 www.e-jjj.com)回复于 2003-09-02 11:53:09 得分 0

问题出在这个代码上  
          p   =   (QueueNode   *)malloc(sizeof(QueueNode));  
          用c++就不要使用malloc,   要使用new   和   delete   的方式  
          因为你的malloc函数并没有完成类当中成员的初始化工作,它只是把内存分配了而已。  
  而new函数则不同,它会自动分配内存并且调用成员的初始化工作。  
  修改方式  
          p   =   new   QueueNode;Top

相关问题

  • 链式队列初始化出错
  • byte 转CString 出错?
  • 队列的pv操作指什么?
  • 对Excel的操作,出错?
  • ado 操作出错代码
  • 操作ini文件出错
  • 数据库操作出错
  • CRecordset::GetFieldValue(short,CString)出错
  • >>>>>>>>>>>>>>.NET下怎样实现队列以及队列的“加入”、“取数”等操作?<<<<<<<<<<
  • msgbox "操作成功!"为什么出错?

关键词

  • player
  • null
  • plqu
  • queuenode
  • gpinfo
  • plinkqueue
  • 出错
  • gametype
  • gamepairsinfo
  • linkqueue

得分解答快速导航

  • 帖主:whocantellmewhy

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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