这是一个队列的操作!出错原因是CString!哪位高手帮忙解决,谢谢!!!
#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




