C语言动态内存分配详解:malloc与free

需积分: 9 3 下载量 172 浏览量 更新于2024-08-19 收藏 5.14MB PPT 举报
"动态存储分配函数-东南大学C语言课件PPT" 在C语言中,动态存储分配函数是程序员在程序运行时动态地分配和释放内存的重要工具。这些函数允许程序根据需要分配内存,而不是在编译时固定内存大小。在本课件中,主要讨论了`malloc`和`free`这两个关键的动态内存管理函数。 `malloc`函数用于在程序运行时动态分配指定大小的内存。它的原型如下: ```c void *malloc(size_t size); ``` `malloc`接收一个参数`size`,表示你需要分配的字节数。如果分配成功,它会返回一个`void`类型的指针,这个指针指向新分配的内存块的起始地址。如果无法分配到足够的内存,`malloc`将返回`NULL`。值得注意的是,实际分配的内存可能比请求的`size`多一些,这是为了便于内存管理。 `free`函数用于释放之前通过`malloc`分配的内存。其原型如下: ```c void free(void *ptr); ``` `free`函数接收一个参数`ptr`,这是一个`void`指针,指向之前`malloc`分配的内存块的起始地址。释放内存是防止内存泄漏的关键步骤。一旦内存被`free`,就不再属于你的程序,试图再次释放同一内存或者使用已经被释放的内存都会导致未定义的行为,可能会引发程序崩溃或其他严重问题。 在C++中,尽管课程也涵盖了C++的内容,但C++的内存管理与C语言中的`malloc`和`free`有所不同。C++引入了构造函数、析构函数以及智能指针等机制,它们可以更安全、更方便地处理内存。例如,当一个对象的生命周期结束时,析构函数会自动调用,这通常包括释放对象占用的内存。智能指针如`std::unique_ptr`和`std::shared_ptr`则负责自动管理它们所指向的对象的生命周期,避免了手动调用`delete`或`free`的需要。 此外,课程还涉及了C++的基础知识,包括程序设计概念、C++语言的基本语法和面向对象编程。课程从概述开始,讲解了计算机程序设计语言的发展、面向对象的方法以及信息的表示与存储。接着,课程深入到C++的简单程序设计,如基本数据类型、表达式、输入/输出、控制结构和自定义数据类型。随后,介绍了函数的使用,包括函数的定义、内联函数、默认参数、重载和模板。课程的核心部分是面向对象编程,讲解了类与对象的概念、构造函数、析构函数、类的组合、类模板以及面向对象的标记。这些内容为学习者提供了全面的C++基础,以便他们能够进行有效的面向对象编程。