user-0 提问: DEV C++出现program received signal sigsegv,segmentation fault

回复:
user: user-1
content: void InitQueue(LinkQ Q){       Q.front=(QNode*)malloc(sizeof(QNode)); if(!Q.front) printf("error\n");  Q.rear=Q.front=0;  这里是要做什么？       Q.rear->next=NULL;      }

user: user-2
content: 引用 7 楼 zsbrittany 的回复:[quote=引用 6 楼 自信男孩 的回复:] #include <stdio.h> #include <stdlib.h> #include <string.h>  typedef struct QNode{     int  data;     struct QNode  *next; } QNode,*QueuePtr;  typedef struct {     QNode *front;     QNode *rear;     int   len; } LinkQ;   //void InitQueue(LinkQ Q){ void InitQueue(LinkQ *Q) {      Q->front=(QNode*)malloc(sizeof(QNode));     if(!Q->front)         printf("error\n");     //Q->rear = Q->front=0;    //这句是把front重置NULL了，所以会段错误     Q->rear = Q->front;     Q->rear->next=NULL;  }  int QueueEmpty(LinkQ Q){     if(Q.front==Q.rear)  return 1;     else return 0; }  //void EnQueue(LinkQ Q,int e){ void EnQueue(LinkQ *Q,int e){      QNode *p;     p=(QNode*)malloc(sizeof(QNode));     if(!p) printf("error");     p->data=e; p->next=NULL;     Q->rear->next=p;     Q->rear=p;  }  void DeQueue (LinkQ &Q,int e){     QNode *p;     if(Q.front==Q.rear)  printf("error");     p=Q.front->next;     e=p->data;     Q.front->next=p->next;     if(Q.rear==p) Q.rear=Q.front;     free(p);  }   void GetHead (LinkQ Q,int *e){     if(Q.front==Q.rear) printf("error");     *e=Q.front->next->data;  }   int main(){      LinkQ Q;     //int n,i,x,temp;     int x,temp;     //InitQueue(Q);     InitQueue(&Q);      scanf("%d",&temp);     EnQueue(&Q,temp);      GetHead(Q, &x);     printf("%d",x);      return 0;  } 供参考 ～  感谢感谢   但有点不理解为什么要把一部分 定义的 Q  改成  *Q  [/quote]  可以了解一下swap为什么传参数为指针而不是普通变量～

user: user-0
content: 引用 6 楼 自信男孩 的回复:#include <stdio.h> #include <stdlib.h> #include <string.h>  typedef struct QNode{     int  data;     struct QNode  *next; } QNode,*QueuePtr;  typedef struct {     QNode *front;     QNode *rear;     int   len; } LinkQ;   //void InitQueue(LinkQ Q){ void InitQueue(LinkQ *Q) {      Q->front=(QNode*)malloc(sizeof(QNode));     if(!Q->front)         printf("error\n");     //Q->rear = Q->front=0;    //这句是把front重置NULL了，所以会段错误     Q->rear = Q->front;     Q->rear->next=NULL;  }  int QueueEmpty(LinkQ Q){     if(Q.front==Q.rear)  return 1;     else return 0; }  //void EnQueue(LinkQ Q,int e){ void EnQueue(LinkQ *Q,int e){      QNode *p;     p=(QNode*)malloc(sizeof(QNode));     if(!p) printf("error");     p->data=e; p->next=NULL;     Q->rear->next=p;     Q->rear=p;  }  void DeQueue (LinkQ &Q,int e){     QNode *p;     if(Q.front==Q.rear)  printf("error");     p=Q.front->next;     e=p->data;     Q.front->next=p->next;     if(Q.rear==p) Q.rear=Q.front;     free(p);  }   void GetHead (LinkQ Q,int *e){     if(Q.front==Q.rear) printf("error");     *e=Q.front->next->data;  }   int main(){      LinkQ Q;     //int n,i,x,temp;     int x,temp;     //InitQueue(Q);     InitQueue(&Q);      scanf("%d",&temp);     EnQueue(&Q,temp);      GetHead(Q, &x);     printf("%d",x);      return 0;  } 供参考 ～  感谢感谢   但有点不理解为什么要把一部分 定义的 Q  改成  *Q

user: user-2
content: #include <stdio.h> #include <stdlib.h> #include <string.h>  typedef struct QNode{     int  data;     struct QNode  *next; } QNode,*QueuePtr;  typedef struct {     QNode *front;     QNode *rear;     int   len; } LinkQ;   //void InitQueue(LinkQ Q){ void InitQueue(LinkQ *Q) {      Q->front=(QNode*)malloc(sizeof(QNode));     if(!Q->front)         printf("error\n");     //Q->rear = Q->front=0;    //这句是把front重置NULL了，所以会段错误     Q->rear = Q->front;     Q->rear->next=NULL;  }  int QueueEmpty(LinkQ Q){     if(Q.front==Q.rear)  return 1;     else return 0; }  //void EnQueue(LinkQ Q,int e){ void EnQueue(LinkQ *Q,int e){      QNode *p;     p=(QNode*)malloc(sizeof(QNode));     if(!p) printf("error");     p->data=e; p->next=NULL;     Q->rear->next=p;     Q->rear=p;  }  void DeQueue (LinkQ &Q,int e){     QNode *p;     if(Q.front==Q.rear)  printf("error");     p=Q.front->next;     e=p->data;     Q.front->next=p->next;     if(Q.rear==p) Q.rear=Q.front;     free(p);  }   void GetHead (LinkQ Q,int *e){     if(Q.front==Q.rear) printf("error");     *e=Q.front->next->data;  }   int main(){      LinkQ Q;     //int n,i,x,temp;     int x,temp;     //InitQueue(Q);     InitQueue(&Q);      scanf("%d",&temp);     EnQueue(&Q,temp);      GetHead(Q, &x);     printf("%d",x);      return 0;  } 供参考 ～

user: user-3
content: 1. next可能为空 2. GetHead的入参e应该用引用 int &

user: user-0
content: 引用 3 楼 gouyanfen 的回复:Q.rear=Q.front=0;   肯定有问题了，Q.front 记录了分配的指针，然后你置为0了？ Q.rear=Q.front;就可以了。 你可以在那打印下看你的指针的指向。 你改变了分配的内存指向，在删除时必然会出错了 [quote=引用 2 楼 zsbrittany 的回复:] [quote=引用 1 楼 gouyanfen 的回复:] void InitQueue(LinkQ Q){       Q.front=(QNode*)malloc(sizeof(QNode)); if(!Q.front) printf("error\n");  Q.rear=Q.front=0;  这里是要做什么？       Q.rear->next=NULL;      } 我是想把开始时头指针和尾指针指向同一个节点 这一步有问题么？ [/quote][/quote]  噢噢噢噢 这里是有问题  void GetHead (LinkQ Q,int e){     if(Q.front==Q.rear) printf("error");     e=Q.front->next->data; 刚刚调试说这里也有这个问题，又是为什么？      }

user: user-1
content: Q.rear=Q.front=0;   肯定有问题了，Q.front 记录了分配的指针，然后你置为0了？ Q.rear=Q.front;就可以了。 你可以在那打印下看你的指针的指向。 你改变了分配的内存指向，在删除时必然会出错了 引用 2 楼 zsbrittany 的回复:[quote=引用 1 楼 gouyanfen 的回复:] void InitQueue(LinkQ Q){       Q.front=(QNode*)malloc(sizeof(QNode)); if(!Q.front) printf("error\n");  Q.rear=Q.front=0;  这里是要做什么？       Q.rear->next=NULL;      } 我是想把开始时头指针和尾指针指向同一个节点 这一步有问题么？ [/quote]

user: user-0
content: 引用 1 楼 gouyanfen 的回复:void InitQueue(LinkQ Q){       Q.front=(QNode*)malloc(sizeof(QNode)); if(!Q.front) printf("error\n");  Q.rear=Q.front=0;  这里是要做什么？       Q.rear->next=NULL;      } 我是想把开始时头指针和尾指针指向同一个节点 这一步有问题么？