博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C/C++ 错误笔记-在给结构体中的指针赋值时,要注意该指针是否已指向内存空间...
阅读量:4550 次
发布时间:2019-06-08

本文共 873 字,大约阅读时间需要 2 分钟。

先来看下面的例子:

#include 
#include
#include
#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了。因此在使用指针时需要记得一句话:

没有内存,哪来的指针? 

转载于:https://www.cnblogs.com/yongdaimi/p/6953268.html

你可能感兴趣的文章
mapreduce 实现矩阵乘法
查看>>
Jquery EasyUI封装简化操作
查看>>
OO第一单元总结
查看>>
[原创]你所需要了解的软件测试相关标准
查看>>
最近这么火的iOS视频直播
查看>>
程序员陪女朋友自拍杆哪个好?自拍杆品牌推荐
查看>>
output 参数在存储过程中的用法
查看>>
大数加法和乘法(高精度)
查看>>
利用SynchronizationContext.Current在线程间同步上下文
查看>>
单片机reg51.h头文件详解(1)
查看>>
python各种类型转换-int,str,char,float,ord,hex,oct等
查看>>
sublime Text3 快捷键
查看>>
HDU - 3416-Marriage Match IV (最大流 + 最短路)
查看>>
19 年书单
查看>>
力扣——各位相加
查看>>
规范 : Sql statusEnum
查看>>
jQuery的.live()和.die() 使用介绍
查看>>
mybatis
查看>>
我该怎么安排下属的工作-项目经理如何分配任务
查看>>
Chord算法(原理)
查看>>