Ethereal340 2023-09-17 15:29 采纳率: 100%
浏览 4
已结题

为什么已经用malloc分配空间了还是显示异常访问冲突


#include"stdio.h"
#include"stdlib.h"
typedef struct node
{
    int data;//结点所对应的数据
    struct node* Next;//指向下一个结点的指针next
}l, * list;
list H;
list makebiao(int n)//n为元素个数
{
    int i;
    list H;
    H = (list)malloc(sizeof(l));
    H->Next= (list)malloc(sizeof(l));
    H->data = 0;
    list p = H->Next;
    p->Next= (list)malloc(sizeof(l));
    for (i = 1; i < n; i++)
    {
        p->data = i;
        p = p->Next;
    }
    return H;
}
void destroy(list* H)
{
    list p, q;
    p = *H;
    while (p)
    {
        q = p;
        p = p->Next;
        free(q);
    }
    *H = NULL;
}
list insert(list H, int x)
{
    list p, q;
    p = (list)malloc(sizeof(l));
    q = (list)malloc(sizeof(l));
    for (p = H; p->Next->data <= x; p = p->Next)
    {
    }
    q->data = x;
    q->Next = p->Next;
    q = p->Next;
    return H;
}
void putbiao(list H)
{

    while (H)
    {
        printf("%d\t", H->data);
        H = H->Next;
    }
}
int main()
{

    list H;
    H = makebiao(99);
    putbiao(H);
    insert(H, 5);
    putbiao(H);
    destroy(&H);
            return 1;
}

报错图片

img


用的是VS2019

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-09-17 17:38
    关注

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

    #include"stdio.h"
    #include"stdlib.h"
    typedef struct node
    {
        int data;//结点所对应的数据
        struct node* Next;//指向下一个结点的指针next
    }l, * list;
    list H;
    list makebiao(int n)//n为元素个数
    {
        int i;
        list H;
        H = (list)malloc(sizeof(l));
        H->Next = NULL;  //H->Next= (list)malloc(sizeof(l)); 修改
        H->data = 0;
        list p = H;      // list p = H->Next;                修改
                         //p->Next= (list)malloc(sizeof(l)); 修改
        for (i = 1; i <= n; i++) // for (i = 1; i < n; i++)  修改
        {
            p->Next = (list)malloc(sizeof(l));
            p->Next->Next = NULL;
            p->Next->data = i;
            p = p->Next;
        }
        return H;
    }
    void destroy(list* H)
    {
        list p, q;
        p = *H;
        while (p)
        {
            q = p;
            p = p->Next;
            free(q);
        }
        *H = NULL;
    }
    list insert(list H, int x)
    {
        list p, q;
        p = NULL;     //p = (list)malloc(sizeof(l));   修改
        q = (list)malloc(sizeof(l));
        q->data = x;
        for (p = H; p->Next && p->Next->data <= x; p = p->Next); // 修改
        // for (p = H; p->Next->data <= x; p = p->Next)
        q->Next = p->Next;
        p->Next = q; //q = p->Next;  修改
        return H;
    }
    void putbiao(list H)
    {
        H = H->Next; // 修改
        while (H)
        {
            printf("%d\t", H->data);
            H = H->Next;
        }
    }
    int main()
    {
     
        list H;
        H = makebiao(99);
        putbiao(H);
        insert(H, 5);
        putbiao(H);
        destroy(&H);
        return 1;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月25日
  • 已采纳回答 9月17日
  • 创建了问题 9月17日

悬赏问题

  • ¥15 matlab无法读取mat文件,如何解决?
  • ¥15 51单片机读写24C02
  • ¥50 grlb复位怎么能够不回调?也不卡在home状态?
  • ¥15 win系统下做一个开机自动最大化运行某应用程序的执行文件
  • ¥15 grlb复位,设置设置返回行程为0,卡在home状态,怎么解决?
  • ¥100 CubeIDE更换芯片以及调整代码
  • ¥50 有没有可以远程指导问题
  • ¥15 origin柱状图,分组如何分
  • ¥15 两个不同IP互通的配置命令
  • ¥15 office弹窗激活问题