C语言内存管理和结构体定义详解
104 浏览量
更新于2024-08-03
收藏 3KB MD 举报
C语言内存管理与联合结构课件笔记
本资源主要讲解了C语言中的内存管理和结构体与联合的使用。内存管理部分详细介绍了堆栈概念、动态内存分配函数、内存泄漏和悬挂指针等问题,并提供了示例代码。结构体与联合部分则详细讲解了定义、访问和嵌套使用,同样配有代码实例说明。
**内存管理**
内存管理是C语言编程中至关重要的一部分。合理地分配和释放内存可以提高程序的效率和稳定性。内存管理技术包括内存的分配、释放、堆和栈的概念等。
**堆和栈的概念**
* 堆(Heap):用于动态分配内存,大小可变,需要手动释放。
* 栈(Stack):用于存储函数调用的局部变量和返回地址,自动分配和释放。
**动态内存分配函数**
* `malloc(size_t size)`: 分配指定大小的字节内存,返回指向首字节的指针。
* `calloc(size_t num, size_t size)`: 分配 num*size 大小的内存,初始化为 0。
* `realloc(void *ptr, size_t size)`: 重新分配内存,可以扩大或缩小已分配的内存块。
* `free(void *ptr)`: 释放动态分配的内存。
**内存泄漏与悬挂指针**
* 内存泄漏:分配内存后未释放,导致内存资源浪费。
* 悬挂指针:释放内存后未置空,可能导致错误访问。
**动态内存分配示例**
```c
#include <stdio.h>
#include <stdlib.h>
int main() {
int *ptr;
ptr = (int *)malloc(5 * sizeof(int)); // 分配 5 个 int 大小的内存空间
if (ptr == NULL) {
printf("内存分配失败\n");
return 1;
}
for (int i = 0; i < 5; i++) {
ptr[i] = i * 2; // 赋值
}
for (int i = 0; i < 5; i++) {
printf("%d", ptr[i]); // 打印
}
free(ptr); // 释放内存
ptr = NULL; // 置空指针
return 0;
}
```
**内存管理的注意事项**
* 动态分配的内存需要手动释放,避免内存泄漏。
* 释放内存后,应将指针置空,防止悬挂指针。
* 访问分配内存前,应检查内存是否成功分配。
* 避免多次释放同一块内存。
**结构体与联合**
结构体是C语言中的一种数据结构,它可以将多个变量组合成一个单元。联合是结构体的一种特殊形式,它可以将多个变量组合成一个单元,但只能存储其中一个变量的值。
**定义和访问结构体**
```c
#include <stdio.h>
struct Student {
char name[50];
int age;
float gpa;
};
int main() {
struct Student s1;
strcpy(s1.name, "Alice");
s1.age = 20;
s1.gpa = 3.8;
printf("");
return 0;
}
```
本资源适合学习C语言的学生或者初级开发人员,通过学习可以全面掌握C语言中的内存分配与释放方法,避免内存泄漏等问题。还可以熟练使用结构体与联合进行数据组织。
206 浏览量
150 浏览量
176 浏览量
447 浏览量
551 浏览量
576 浏览量
720 浏览量
970 浏览量
天真且kk
- 粉丝: 263
- 资源: 93
最新资源
- CStrAinBP:2 个单元格串的重叠元素。 比 INTERSECT/ISMEMBER/SETDIFF 快 10-20 倍。-matlab开发
- SecKill-System:一个秒杀抢购项目:分别提供MySQL乐观锁,Redis分布锁和ZooKeeper分布锁共3种方案
- rt-thread-code-stm32f103-yf-ufun.rar,yf-ufun STM32F103 是优凡
- Gra_w_zgadywanie_liczb_2
- shuaishuai-book
- KaanBOT:KaanBOT是一款适度有趣的不和谐机器人
- ARFlower:AR花
- 建筑公司项目部施工管理制度汇编(流程图、岗位职责)
- 实现reload按钮效果源码下载
- PDFBookmark-1.0.2-final.zip
- 行间拖拽插件
- SFACC:阿西西圣法兰西斯天主教会加拉迪玛瓦网站
- CAD图块素材之电视背景墙、玄观、书柜详图
- API:GitHub上Viva Wallet开源项目的索引
- chokidar-cli:快速的跨平台cli实用程序,可监视文件系统的更改
- book_project