zoukankan      html  css  js  c++  java
  • C语言链表与malloc函数

    // 分配内存空间.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdio.h"
    #include "malloc.h"
    struct Student
    {
        int id;
        char *name;
        int score;
        struct Student *next;
    };

    void errorFun()
    {
        struct Student stu={1,"wq",99};
        struct Student *head,*s1;
        for(int i=0;i<3;i++)
        {        
            //这一句,只在第一次执行的时候给s分配了内存地址,第一次以后执行都是用相同的内存地址,也就是说从第一次循环过后每次都是给同一个内存段设置值,之后后来的值会覆盖之前的值,所以建立链表错误
            struct Student s,*s2;
            s.id=i;
            s.name="学生";
            s.score=i*10;
            s2=&s;
            if(i==0)
            {
                head=&s;
                s1=head;
            }else
            {
                s1->next=s2;
                s1=s2;
            }
        }
        //代码运行到这里的时候,无论是head,s1还是s2都是指向一个地址的指针,而且它们指向的结构体的next其实是指向本身,这就进入了一个死循环
        s1->next=NULL;
        printf("学号:%d,姓名:%s,成绩:%d\n",stu.id,stu.name,stu.score);
    }
    void sucessFun()
    {
        struct Student stu={1,"wq",99};
        struct Student *head,*s1;
        
        for(int i=0;i<3;i++)
        {    
            //在这里动态分配内存,就不会有上面的Bug了
            struct Student *s2=(struct Student *)malloc(sizeof(struct Student));
            (*s2).id=i;
            s2->name="学生";
            s2->score=i*10;
            
            if(i==0)
            {
                head=s2;
                s1=head;
            }else
            {
                s1->next=s2;
                s1=s2;
            }
        }
        s1->next=NULL;
        //循环链表
        Student *temp=head;
        while(temp!=NULL)
        {
            printf("学号:%d,姓名:%s,成绩:%d\n",temp->id,temp->name,temp->score);
            temp=temp->next;
        }
        
        //printf("学号:%d,姓名:%s,成绩:%d\n",stu.id,stu.name,stu.score);
    }
    void main()
    {
        //errorFun();
        sucessFun();
    }
  • 相关阅读:
    BZOJ 4555: [Tjoi2016&Heoi2016]求和 [分治FFT 组合计数 | 多项式求逆]
    BZOJ 4555: [Tjoi2016&Heoi2016]求和 [FFT 组合计数 容斥原理]
    BZOJ 4259: 残缺的字符串 [FFT]
    BZOJ 2287. [HZOI 2015]疯狂的机器人 [FFT 组合计数]
    BZOJ 4503: 两个串 [FFT]
    CF528D. Fuzzy Search [FFT]
    快速傅里叶变换 & 快速数论变换
    UOJ#77. A+B Problem [可持久化线段树优化建边 最小割]
    BZOJ 2034: [2009国家集训队]最大收益 [贪心优化 Hungary]
    BZOJ 4276: [ONTAK2015]Bajtman i Okrągły Robin [线段树优化建边]
  • 原文地址:https://www.cnblogs.com/mxw09/p/1816496.html
Copyright © 2011-2022 走看看