• C/C++ 错误笔记-在给结构体中的指针赋值时,要注意该指针是否已指向内存空间


    先来看下面的例子:

    #include <stdlib.h>
    #include <string.h>
    #include <stdio.h>
    
    #pragma warning(disable:4996)
    
    typedef struct _Student
    {
        char name[64];
        int age;
    
    }Student;
    
    
    typedef struct _Teacher
    {
        char name[64];
        int age;
        char *p1;
        char **p2;
        Student s1;
        Student *ps1;
    
    }Teacher;
    
    
    
    int main()
    {
    
        Teacher t1;
        t1.age = 30;
        t1.s1.age = 20;
    
        // 操作结构体中的结构体指针
        t1.ps1->age = 100;
    
        system("pause");
        return 0;
    }

    编译,没有问题,但是一运行,程序直接报错

    问题出现在

    t1.ps1->age = 100; 这一行,因为我们在给结构体指针Student的age属性赋值时,并未给ps1指针开辟内存空间,所以相当于给一个空指针赋值,因此程序crash掉了。

    下面是修改后的代码:

    int main()
    {
    
        Teacher t1;
        Student s1;
        t1.age = 30;
        t1.s1.age = 20;
    
        // 操作结构体中的结构体指针
        t1.ps1 = &s1;
        t1.ps1->age = 100;
    
        system("pause");
        return 0;
    }

    我们在给ps1的age属性赋值时,已为ps1指向了一块内存空间,这样程序就不会再crach了。因此在使用指针时需要记得一句话:

    没有内存,哪来的指针? 

  • 相关阅读:
    Crontab '2>&1 &' 含义
    form提交方式Methor
    oracle基本术语
    在工作中常用的sql语句
    常用的删除大数据方法(游标+分段)
    oracle9i、10g、11g区别
    SSH面试总结(Hibernage面试)
    实习生招聘笔试
    TopCoder上一道600分滴题
    Oracle数据库面试题汇总
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/6953268.html
Copyright © 2020-2023  润新知