顺序表无法初始化,提示段错误

发布于 2022-09-01 06:33:22 字数 1186 浏览 26 评论 0

#include <stdio.h>
#include <stdlib.h>

// squeue list operator

#define MAXSIZE 100

typedef int Dataype;

typedef struct
{
    Dataype data[MAXSIZE];
    int length;
}Sqlist;

// init a sqlist
void Init_sqlist(Sqlist *list)
{

    list = (Sqlist *)malloc(sizeof(Sqlist));
    if (NULL == list)
    {
        perror("Init_sqlist error");
        exit(-1);
    }
    list->length = 0;
}
// append element to sqlist
void Append_sqlist(Sqlist *list,Dataype x)
{
    printf("length %d\n", list->length);
    if (MAXSIZE !=list->length)
    {
        list->data[list->length] = x;
        list->length++;
    }
}
//  print sqlist
void Print_sqlist(Sqlist *list)
{
    int i;
    if (0 != list->length)
    {
        for (i = 0; i < list->length; ++i)
        {
            printf("%d ", list->data[i]);
        }
        printf("\n");
    }
    else
        printf("empty\n");
}

int main(int argc, char const *argv[])
{
    int  i;
    Sqlist *list2=NULL;
    Init_sqlist(list2);;
    for (i = 0; i < 10; ++i)
    {
        Append_sqlist(list2,i);
    }

    Print_sqlist(list2);
    system("pause");
    return 0;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

許願樹丅啲祈禱 2022-09-08 06:33:22

问题出在 Init_sqlist 这里,输入的参数是一个 Sqlist 指针,但是函数里只改变了形参,没能改变实参,所以在 main 中执行 Init_sqlist(list2)list2 仍然是 NULL。这一点只需要在后面加一句话就看得到,

cprintf("list2 is %d\n", list2)

有两种改法,第一种是改变 Init_sqlist 的参数类型为 Sqlit**

cvoid Init_sqlist(Sqlist **pList)
{
    Sqlist * list;
    list = (Sqlist *)malloc(sizeof(Sqlist));
    if (NULL == list)
    {
        perror("Init_sqlist error");
        exit(-1);
    }
    list->length = 0;
    (*pList) = list;
}

调用

c// Init_sqlist(list2);;

Init_sqlist(&list2);

第二种是改变 Init_sqlist 为创建函数,即加返回值

cSqlist* Init_sqlist()
{
    Sqlist* list;
    list = (Sqlist *)malloc(sizeof(Sqlist));
    if (NULL == list)
    {
        perror("Init_sqlist error");
        exit(-1);
    }
    list->length = 0;
    return list;
}

调用

// Sqlist *list2=NULL;
// Init_sqlist(list2);;

Sqlist *list2 = Init_sqlist();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文