Featured image of post 计算机基础 数据结构与算法 深入理解C指针

计算机基础 数据结构与算法 深入理解C指针

🌏排序算法实践 🎯 这篇文章用于记录 《深入理解C指针》 这本书的学习过程

🎄第1章 认识指针

🍭指针和内存

C程序在编译后 会以三种形式使用内存 [1] 静态/全局内存:静态变量和全局变量的分配位置 [2] 自动内存:函数局部变量的分配位置 [3] 动态内存:堆内存

🍩声明指针

🍩阅读声明的技巧

🎄第2章 C的动态内存管理

🍭动态内存分配

int* pi;
// 推荐方式
pi = (int*)malloc(sizeof (int));
*pi = 200;
printf("*pi = %d\n", *pi);
free(pi);

内存泄漏

概述 如果已经不再使用的内存长时间没有释放 越积越多 最终可能会引发内存泄漏 导致内存泄漏的原因 [1] 丢失内存地址 [2] 应该free的内存没有free 造成堆内存被用尽(隐式内存泄漏)

丢失内存地址 简而言之 就是因为操作不当 无法再找回所分配的空间的起始地址 从而无法对孤立在堆上的那块内存做处理 它便会一直处于被分配的状态 无法被回收利用 造成系统资源的浪费

隐式内存泄漏 由于程序员的疏忽 没有及时将该释放的内存释放

🍭动态内存分配函数

函数 使用说明
malloc 从堆上分配内存
realloc 在之前分配的内存块的基础上 将内存分配为更大或更小的部分
calloc 从堆上分配内存并清零
free 释放内存块