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

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

image.png

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


详细说明:

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


何为销毁?

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


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

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


static作用之一

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


相关文章
|
6月前
指针\动态二维数组空间
指针\动态二维数组空间
38 4
|
6月前
指针\分配动态空间-筛选法求质数
指针\分配动态空间-筛选法求质数
41 5
|
7月前
|
C语言
C语言(指针详解)重点笔记:指针易错点,都是精华
C语言(指针详解)重点笔记:指针易错点,都是精华
89 0
聊一聊指针的易错点
聊一聊指针的易错点
106 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的值。
1532 0
|
存储 C语言 编译器
给指针malloc分配空间后就等于数组吗?
首先回答这个的问题:严格的说不等于数组,但是可以认为它是个数组一样的使用而不产生任何问题。不过既然这样,那它应该算是个数组吧。所以,一般我们都用“动态数组”这种名字来称呼这种东西。 要讲清楚这个东西,涉及到malloc函数,指针类型和“[ ]”下标运算。
1150 0
|
1月前
|
存储 C语言
C语言如何使用结构体和指针来操作动态分配的内存
在C语言中,通过定义结构体并使用指向该结构体的指针,可以对动态分配的内存进行操作。首先利用 `malloc` 或 `calloc` 分配内存,然后通过指针访问和修改结构体成员,最后用 `free` 释放内存,实现资源的有效管理。
130 13