m0_74267230 2024-01-12 07:13 采纳率: 33.3%
浏览 6

求解答,取消对 NULL指针 *L 的引用。

请问一下问什么我的代码在运行的时候为什么会直接结束,不理解“取消对 NULL指针 *L 的引用”
这是在写顺序表时遇到的问题,求解答。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxsize 50
typedef struct
{
    int data[maxsize];
    int length;
}sqlist;

void creatlist(sqlist** L, int a[], int n)
{
    *L = (sqlist*)malloc(sizeof(sqlist));
    for (int i = 0;i < n; i++)
    {
        (*L)->data[i] = a[i];
    }
}

void inlist(sqlist** L)
{
    *L = (sqlist*)malloc(sizeof(sqlist));
    (*L)->length = 0;
}

bool ifempty(sqlist* L)
{
    return (L->length == 0);
}

void add(sqlist** L,int a,int n)
{
    printf("插入的元素,插入的位置");
    for (int i = (*L)->length; i >=n; i--)
    {    
        (*L)->data[i - 1] = (*L)->data[i - 1];
    }
    (*L)->data[n] = a;
}

void input(sqlist* L)
{
    for(int i=0;i<L->length-1;i++)
    {
        printf("%d", L->data[i]);
    }
}

int main()
{
    sqlist* mylist;
    int a[4] = {1,2,3,4};
    inlist(&mylist);

    int n = 2;
    creatlist(&mylist,a,n);

    int b = 1, c = 2;
    add(&mylist,b ,c);

    return 0;
}

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2024-01-12 08:46
    关注

    修改完善如下,改动处见注释,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define maxsize 50
    typedef struct
    {
        int data[maxsize];
        int length;
    }sqlist;
    
    void creatlist(sqlist* L, int a[], int n)  //void creatlist(sqlist** L, int a[], int n) 修改
    {
        //*L = (sqlist*)malloc(sizeof(sqlist)); 修改
        for (int i = 0; i < n; i++)
        {
            L->data[i] = a[i];  //(*L)->data[i] = a[i]; 修改
            L->length++;        // 修改
        }
    }
    
    void inlist(sqlist** L)
    {
        (*L) = (sqlist*)malloc(sizeof(sqlist)); // 修改
        (*L)->length = 0;
    }
    
    bool ifempty(sqlist* L)
    {
        return (L->length == 0);
    }
    
    void add(sqlist* L, int a, int n)  //void add(sqlist** L, int a, int n)
    {
        if (n < 1 || n > L->length + 1)  return; // 修改
        printf("插入的元素,插入的位置\n");
        for (int i = L->length; i >= n; i--)  //for (int i = (*L)->length; i >= n; i--)
        {
            L->data[i] = L->data[i - 1]; //(*L)->data[i - 1] = (*L)->data[i - 1];
        }
        L->data[n - 1] = a;       // 修改
        L->length++;              // 修改
    }
    
    void input(sqlist* L)
    {
        for (int i = 0; i < L->length; i++)  // for (int i = 0; i < L->length - 1; i++) 修改
        {
            printf(" %d", L->data[i]);
        }
        printf("\n");
    }
    
    int main()
    {
        sqlist* mylist;
        int a[4] = { 1,2,3,4 };
        inlist(&mylist);
    
        int n = 2;
        creatlist(mylist, a, n); //creatlist(&mylist, a, n); 修改
        input(mylist);           // 修改
    
        int b = 1, c = 2;
        add(mylist, b, c);  //add(&mylist, b, c); 修改
        input(mylist);      // 修改 
    
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 1月12日

悬赏问题

  • ¥15 无源定位系统的时差估计误差标准差
  • ¥15 请问这个代码哪里有问题啊
  • ¥20 python--version在命令端输入结果Python is not defined怎么办?还有pip不是exe格式是不是没安装成功?
  • ¥15 通过GaussianView进行结构微调消除虚频
  • ¥15 调用transformers库
  • ¥15 由于导出的数据名字中带有/,导致Matlab打不开,怎么办?
  • ¥15 新硬盘安装的程序总是崩溃,提示遇到错误
  • ¥15 openpcdet自制数据集评估bev精度和3d精度相同
  • ¥15 excel 上下按钮 显示行
  • ¥20 云卓h12pro 数传问题