c语言中较常见的由内存分配引起的错误_内存越界_内存未初始化_内存太小_结构体隐含指针

本文介绍了C语言编程中常见的内存管理错误,包括指针未指向合法内存、结构体成员指针未初始化、内存分配不足、内存未初始化和内存越界。特别强调了结构体成员指针的初始化问题,以及如何避免这些错误,例如正确分配内存大小,使用assert宏进行参数校验,并强调了初始化变量的重要性。
摘要由CSDN通过智能技术生成

 本篇是基于云天之巅博主音视频开发中的一个bug,继而查阅了的一点资料;本篇转载自博客园某博主的随笔,并做极少量的修改,原文地址:https://www.cnblogs.com/haore147/p/3647348.html

 

1.指针没有指向一块合法的内存

  定义了指针变量,但是没有为指针分配内存,即指针没有指向一块合法的内浅显的例子就不举了,这里举几个比较隐蔽的例子。

1.1结构体成员指针未初始化

 

1

2

3

4

5

6

7

8

9

10

11

struct student

{

  char *name;

  int score;

}stu,*pstu;

<br>int main()

{

  strcpy(stu.name,"Jimy");

  stu.score = 99;

  return 0;

}  


很多初学者犯了这个错误还不知道是怎么回事。这里定义了结构体变量stu,但是他没想到这个结构体内部char *name这成员在定义结构体变量stu时,只是给name这个指针变量本身分配了4个字节。name指针并没有指向一个合法的地址(连大小都不知道),这时候其内部存的只是一些乱码。所以在调用strcpy函数时,会将字符串"Jimy"往乱码所指的内存上拷贝,而这块内存name指针根本就无权访问,导致出错。解决的办法是为name指针malloc一块空间。

同样,也有人犯如下错误:

1

2

3

4

5

6

7

8

int main()

{

  pstu = (struct student*)malloc(sizeof(struct student));

  st

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值