指针指向空间的申请和释放易错点

简介: 指针指向空间的申请和释放易错点

image.png

上面的代码有很隐晦的错误,但也是非常严重的错误!


详细说明:

首先明确 a 是一个局部变量,当局部变量出自己的大括号时,就自己销毁!


何为销毁?

当 a 进入局部空间时,会向内存申请4个字节的空间,当局部变量 a 出局部空间时,就会将空间(地址)还给电脑


当我们再一次用局部变量的空间的地址访问回去,此行为就是非法!!!(已经释放的空间)

总结:只要返回临时变量的地址,就是错误的,除非此局部变量出局部空间,不销毁(比如 static )!


static作用之一

static修饰局部变量时,使得被修饰的变量成为静态变量,存储在静态区。存储在静态区的数据生命周期与程序相同,在main函数之前初始化,在程序退出时销毁。(无论是局部静态还是全局静态)


相关文章
|
5月前
指针\动态二维数组空间
指针\动态二维数组空间
29 4
|
5月前
指针\分配动态空间-筛选法求质数
指针\分配动态空间-筛选法求质数
31 5
|
6月前
|
C语言
C语言(指针详解)重点笔记:指针易错点,都是精华
C语言(指针详解)重点笔记:指针易错点,都是精华
74 0
聊一聊指针的易错点
聊一聊指针的易错点
98 0
|
Linux
在64位系统下,指向int型的指针占的内存空间多大?
不废话,请看代码演示如下: 注意使用的操作系统的位数,不同位数的操作系统,结果不一样! 我是用的是64位的操作系统! linux下示例代码如下: 1 #include 2 3 int main() 4 { 5 int b = 1; 6 int *a; 7 a = &b; 8 9 printf("b = %d\n", b); //int型变量b的值。
1512 0
|
存储 C语言 编译器
给指针malloc分配空间后就等于数组吗?
首先回答这个的问题:严格的说不等于数组,但是可以认为它是个数组一样的使用而不产生任何问题。不过既然这样,那它应该算是个数组吧。所以,一般我们都用“动态数组”这种名字来称呼这种东西。 要讲清楚这个东西,涉及到malloc函数,指针类型和“[ ]”下标运算。
1140 0
|
21天前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
19 0