小菠菜789 2022-03-23 13:37 采纳率: 100%
浏览 44
已结题

malloc多分配内存

我明明分配五个空间但是遍历结果时却多出一个内存地址

#include <stdio.h>
#include<stdlib.h>
#define MAXSIZE 100
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int ElemType;
typedef struct LNode {
ElemType data; //结点的数据域
struct LNode *next; //结点的指针域
} LNode, LinkList; //LinkList为指向结构体LNode的指针类型
Status InitList_L(LinkList *L)
{
//构造一个空的单链表L
L = (LNode *)malloc(sizeof(LNode)); //生成新结点作为头结点,用头指针L指向头结点
L->next = NULL; //头结点的指针域置空
return OK;
}
void CreateList_L(LinkList *L,int n)
{
for(int i=0;i<n;i++){
LNode *p=(LNode *)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
L=L->next;
}
}
//在此处定义单链表的插入函数ListInsert_L
void ListInsert_L(LinkList *L,int n,int m){
int i=1;
LNode *p=L->next;
while(p!=NULL){
printf("%d",p->data);
if(p->next!=NULL){
printf(",");
}
p=p->next;
}

printf("\n");
p=L->next;
while(i!=n){
    p=p->next;
    i++;
}
if(i==n){
    LNode *s=(LNode *)malloc(sizeof(LNode));
    s->data=m;
    s->next=p->next;
    p->next=s;
}
p=L->next;
while(p!=NULL){
    printf("%d",p->data);
    p=p->next;
    if(p!=NULL){
        printf(",");
    }
}

}
int main()
{
LinkList L; //用LinkList L;替换,与#include "LinkList.h"配合
int n,i;
ElemType e;
InitList_L(&L);
scanf("%d",&n); //输入元素个数
CreateList_L(&L,n);
int m;
scanf("%d%d",&i,&m); //输入插入元素的位置和元素
ListInsert_L(&L,i,m);

return 0;

}

img

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-03-23 13:44
    关注

    InitList_L(&L);这里L已经定义了实例,但到函数内有malloc是不行的

    #include <stdio.h>
    #include<stdlib.h>
    #define MAXSIZE 100
    #define TRUE 1
    #define FALSE 0
    #define OK 1
    #define ERROR 0
    #define INFEASIBLE -1
    #define OVERFLOW -2
    typedef int Status;
    typedef int ElemType;
    typedef struct LNode {
        ElemType data; //结点的数据域
        struct LNode *next; //结点的指针域
    } LNode, LinkList; //LinkList为指向结构体LNode的指针类型
    Status InitList_L(LinkList *L)
    {
        //构造一个空的单链表L
        L = (LNode *)malloc(sizeof(LNode)); //生成新结点作为头结点,用头指针L指向头结点
        L->next = NULL; //头结点的指针域置空
        return OK;
    }
    void CreateList_L(LinkList *L,int n)
    {
        for(int i=0;i<n;i++){
            LNode *p=(LNode *)malloc(sizeof(LNode));
            scanf("%d",&p->data);
            p->next=L->next;
            L->next=p;
            L=L->next;
        }
    }
    //在此处定义单链表的插入函数ListInsert_L
    void ListInsert_L(LinkList *L,int n,int m){
        int i=1;
        LNode *p=L->next;
        while(p!=NULL){
            printf("%d",p->data);
            if(p->next!=NULL){
                printf(",");
            }
            p=p->next;
        }
    
        printf("\n");
        p=L->next;
        while(i!=n){
            p=p->next;
            i++;
        }
        if(i==n){
            LNode *s=(LNode *)malloc(sizeof(LNode));
            s->data=m;
            s->next=p->next;
            p->next=s;
        }
        p=L->next;
        while(p!=NULL){
            printf("%d",p->data);
            p=p->next;
            if(p!=NULL){
                printf(",");
            }
        }
    }
    int main()
    {
        LinkList L; //用LinkList L;替换,与#include "LinkList.h"配合
        int n,i;
        ElemType e;
        //InitList_L(&L);
        L.next = NULL;
        scanf("%d",&n); //输入元素个数
        CreateList_L(&L,n);
        int m;
        scanf("%d%d",&i,&m); //输入插入元素的位置和元素
        ListInsert_L(&L,i,m);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么