- 论坛徽章:
- 0
|
我在GDB和VC里调试过,没有发现问题,为了没有错,请大家看看。谢谢
主要是看看REQ里的info操作有没有错。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <malloc.h>
typedef struct _REQUEST
{
char id[20];
char node[24];
char passwd[24];
char *info;
int len; //it is len of info
struct _REQUEST *next;
}REQ;
struct TaskQueue
{
REQ *front;
REQ *rear;
int Size;
};
struct TaskQueue CurTaskQueue;
void InitQueue();
void Enqueue(char *id, char *node, char *passwd, char *info, int InfoLen);
void Dequeue(REQ *req);
int main(int argc, char **argv)
{
char info[100]={0};
REQ req;
InitQueue();
Enqueue("id1", "node1", "passwd1", "info1", 5);
Enqueue("id2", "node2", "passwd2", "info2", 5);
Dequeue(&req);
printf("a:%sn",req.info);
memcpy(info, req.info, req.len);
free(req.info);
Dequeue(&req);
printf("b:%sn",req.info);
memcpy(info, req.info, req.len);
free(req.info);
exit(0);
}
void InitQueue()
{
CurTaskQueue.front=NULL;
CurTaskQueue.rear=NULL;
CurTaskQueue.Size = 0;
return;
}
void Enqueue(char *id, char *node, char *passwd, char *info, int InfoLen)
{
REQ *item = (REQ *)malloc(sizeof(REQ));
if(item == NULL)
{
perror("Enqueue malloc errorn");
exit(-1);
}
memset(item, 0, sizeof(REQ));
strcpy(item->id, id);
strcpy(item->node, node);
strcpy(item->passwd, passwd);
item->info = (char *)malloc(InfoLen+1);
memset(item->info, 0, InfoLen+1);
memcpy(item->info, info, InfoLen);
item->len = InfoLen;
if (CurTaskQueue.front == NULL)
{
CurTaskQueue.front = item;
CurTaskQueue.rear = item;
}
else
{
CurTaskQueue.rear->next = item;
CurTaskQueue.rear = CurTaskQueue.rear->next;
CurTaskQueue.rear->next = NULL;
}
CurTaskQueue.Size++;
return;
}
void Dequeue(REQ *req)
{
REQ *temptask = NULL;
memset(req, 0, sizeof(REQ));
if (CurTaskQueue.front == NULL)
{
CurTaskQueue.Size=0;
req = NULL;
return;
}
else
{
temptask = CurTaskQueue.front;
strcpy(req->id, temptask->id);
strcpy(req->node, temptask->node);
strcpy(req->passwd, temptask->passwd);
req->len = temptask->len;
req->info = temptask->info;
CurTaskQueue.front = CurTaskQueue.front->next;
free(temptask);
CurTaskQueue.Size--;
}
}
[ 本帖最后由 reviewmyself 于 2005-11-16 22:43 编辑 ] |
|