xioaxioachou 2021-11-15 13:19 采纳率: 100%
浏览 12
已结题

为什么这个程序运行不了,调试的时候又报错?

想创建一个链式结构的队列,输入队列中每个人的程序并输出,但是为什么运行不了,调试的时候又报错?希望得到解答。
Thread 1 received signal SIGSEGV,Segmentation fault.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 40
typedef struct queue
{
    char elemdata[N];
    struct queue *next;
}Queueprt;

typedef struct link
{
    Queueprt *front;
    Queueprt *rear;
}Linkqueue;

void Createqueue(Linkqueue *Q);
void Insertqueue(Linkqueue *Q, char *data);
void Dequeue(Linkqueue *Q, char *str);

int main(void)
{
    char name[N][N];
    char str[N];
    int n;
    Linkqueue *people = NULL;
    Createqueue(people);
    printf("How many people?\n");
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
    {
        scanf("%s", name[i]);
        Insertqueue(people, name[i]);
    }
    for(int i = 0; i < n; i++)
    {
        Dequeue(people, str);
        printf("%s\n", str);
    }
    return 0;
}


void Createqueue(Linkqueue *Q)
{
    Q->front = NULL;
    Q->rear  = NULL;
    Q->front = Q->rear = (Queueprt*)malloc(sizeof(Queueprt));
    if(Q->front == NULL)
    {
        printf("No enough memory!\n");
        exit(0);
    }
    Q->front->next = NULL;
}

void Insertqueue(Linkqueue *Q, char *data)
{
    Queueprt *p;
    p = (Queueprt *) malloc(sizeof(Queueprt));
    if(p == NULL)
    {
        printf("No enough memory to insert!\n");
        exit(0);
    }
    strcpy(p->elemdata, data);
    Q->rear->next = p;
    Q->rear = p;
    p->next = NULL;
}

void Dequeue(Linkqueue *Q, char *str)
{
    Queueprt *p;
    if(Q->front == Q->rear)
    {
        return;
    }
    p = Q->front->next;
    strcpy(str, p->elemdata);
    Q->front->next = p->next;

    if(Q->rear == p)
    {
        Q->rear = Q->front;
    }
    free(p);
}


  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-11-15 13:26
    关注

    Createqueue(people);调用前,people是空的,这个函数内部,你又直接进行Q的操作了,没有给这个链表头分配空间啊
    改为:
    Linkqueue * people = (Queueprt * )malloc(sizeof(Queueprt));
    Createqueue(people);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月23日
  • 已采纳回答 11月15日
  • 创建了问题 11月15日

悬赏问题

  • ¥15 请提供一个符合要求的网页链接。
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码