`

C和C++ 语言动态内存分配

 
阅读更多

原文:http://www.cnblogs.com/zhj202190/archive/2011/05/11/2043620.html

一、C语言动态内存分配

    要实现动态内存的分配,除了利用含指针成员的结构体之外,还需利用C语言提供的几个标准库函数。(使用时应包含头文件“alloc.h”或“malloc.h”或“stdlib.h”)

    1.malloc函数

  函数原型为void *malloc(unsigned int size);在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“size”是一个无符号数。例如: pc=(char *) malloc (100); 表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针, 把该指针赋予指针变量pc。若size超出可用空间,则返回空指针值NULL。

    2.calloc 函数

    函数原型为void *calloc(unsigned int num, unsigned int size)

  按所给数据个数和每个数据所占字节数开辟存储空间。其中num为数据个数,size为每个数据所占字节数,故开辟的总字节数为num*size。函数返回该存储区的起始地址。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。例如: ps=(struct stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的结构长度。因此该语句的意思是:按stu的长度分配2块连续区域,强制转换为stu类型,并把其首地址赋予指针变量ps。

    3. realloc函数:

  函数原型为void *realloc(void *ptr, unsigned int size)

      重新定义所开辟内存空间的大小。其中ptr所指的内存空间是用前述函数已开辟的,size为新的空间大小,其值可比原来大或小。函数返回新存储区的起始地址(该地址可能与以前的地址不同)。例如p1=(float *)realloc(p1,16);将原先开辟的8个字节调整为16个字节。

 **动态申请的内存空间要进行手动用free()函数释放

    4. free函数:

  函数原型为void free(void *ptr)

  将以前开辟的某内存空间释放。函数原型为 void free(void *ptr)其中ptr为存放待释放空间起始地址的指针变量,函数无返回值。应注意:ptr所指向的空间必须是前述函数所开辟的。例如free((void *)p1);将上例开辟的16个字节释放。可简写为free(p1);由系统自动进行类型转换。

二、C++语言动态内存分配

  C++语言中用new和delete来动态申请和释放内存。

    1. 申请单个对象

  int *p;

  p=new int;或者 p=new int(value);

  2. 动态申请数组

  int *p;

  p=new int [100];

  这样可以申请长度为100的数组,但是不能进行初始化。

 3. delete

  int *p, *q;

  p=new int;

  q=new int[10];

  delete p;

  delete [ ]q;

分享到:
评论

相关推荐

    C和C++语言的内存分配详解

    C和C++语言的内存分配详解

    C++动态内存分配研究

    ### C++动态内存分配研究 #### 一、内存分配方式 C++作为一种强大的面向对象编程语言,继承了C语言的基础并引入了许多高级特性。在C++中,内存管理是一项复杂而重要的任务,对于提高程序的稳定性和性能至关重要。...

    C/C++指针引用及动态内存分配详细解析

    在编程领域,C和C++是两种非常基础且强大的编程语言,它们的灵活性和效率深受程序员喜爱。然而,这也带来了对内存管理的直接责任,其中关键的概念包括指针、引用和动态内存分配。下面我们将详细解析这些知识点。 一...

    C++内存分配情况

    全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的 C 语言中,全局变量又分为初始化的和未初始化的,在 C++里面没有这个区分了,他们共同占用同一块内存区。 五、常量存储区 常量存储区,这是一...

    动态内存分配算法(源代码&报告)DynamicAllocate

    动态内存分配是计算机科学中的一个重要概念,特别是在C和C++等编程语言中,它允许程序在运行时根据需要请求和释放内存。动态内存分配的主要优点是灵活性,它使得程序员能够控制内存的使用,避免了固定大小数组可能...

    (麻省理工免费课程)C语言内存管理和C++面向对象编程

    1. **`malloc`函数**:`malloc`是C语言中用于动态内存分配的标准库函数,它返回指向已分配内存块的指针。程序员可以通过`free`函数来释放不再使用的内存,以避免内存泄漏。 2. **`new`操作符**:在C++中,`new`...

    C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++语言核心 C++

    8. **内存管理**:C++支持动态内存分配,程序员可以直接使用new和delete操作符进行内存管理,这虽然灵活但也要求程序员注意内存泄漏问题。C++11引入了智能指针(shared_ptr、unique_ptr等),自动管理内存,减少了...

    c或c++语言程序员面试精选

    2. **指针**:理解指针的概念,指针运算,指针与数组,指针与函数,动态内存分配等。 3. **函数**:函数的定义、调用、参数传递,以及递归函数的理解。 4. **预处理器**:宏定义、头文件包含、条件编译等。 5. **...

    C语言和C++语言学习.zip

    4. **内存管理**:学习动态内存分配(malloc, free)和内存泄漏的概念。 5. **预处理器**:了解宏定义、头文件包含和条件编译指令。 6. **结构体与联合体**:理解复合数据类型,学会创建自定义数据结构。 7. **...

    C++中的内存划分

    动态内存分配是C++中一个重要的特性,它允许程序在运行时根据需要动态地分配内存。例如,在不知道数组大小的情况下,可以使用`new`操作符创建动态数组: ```cpp int* array = new int[size]; ``` 其中`size`是在...

    C C++ 库函数 C语言 C++语言 编程 初学者

    例如,`printf`和`scanf`用于格式化输入输出,`strlen`用来计算字符串长度,`malloc`和`free`则用于动态内存分配和释放。理解并熟练使用这些库函数是C语言学习的基础。 C++库函数在C语言的基础上扩展了许多面向对象...

    C/C++语言参考

    5. **内存管理**:涵盖动态内存分配(malloc, calloc, realloc, free)和内存泄漏的避免。 6. **面向对象编程**:C++中的类、对象、继承、多态、封装等概念,以及模板和异常处理。 7. **标准库**:如STL(Standard...

    C++语言大全 C++语言大全 C++语言大全 C++语言大全

    C++允许程序员直接管理内存,通过new和delete操作符动态分配和释放内存。同时,智能指针(如auto_ptr、unique_ptr、shared_ptr)提供了一种更安全的内存管理方式。 八、多态性 C++的多态性主要通过虚函数和抽象类...

    C和C++内存管理资料(包括内存管理-内存泄漏-内存调试-内存检测方法)

    内存管理是C和C++编程中的核心技能,它涉及到内存分配、释放以及如何避免内存泄漏等问题。本篇将围绕标题和描述中的知识点进行深入探讨。 首先,我们关注的是"内存管理"。在C和C++中,程序员需要手动管理内存,这...

    C 动态内存分配研究

    ### C 动态内存分配研究 #### 内存分配方式 C++作为一种高效的编程语言,在内存管理方面提供了多种机制以适应不同的应用场景。其中,内存分配是实现程序功能的基础之一。根据给定的内容,我们可以深入探讨C++中的...

    动态分区分配

    用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链(表)来管理:在进行内存分配时,系统优先使用空闲区低端的空间。 (2)给出初始状态、...

    C/C++语言参考手册

    《C/C++语言参考手册》是一本为初学者量身打造的编程指南,涵盖了C语言和C++语言的基础知识和高级特性。这本书旨在帮助读者掌握这两种语言的核心概念,理解它们的语法结构,并能够运用到实际的编程项目中。 C语言是...

    C C++语言参考

    《C/C++语言参考》是编程领域中一本重要的参考资料,主要涵盖了C语言和C++语言的基础知识、核心概念以及高级特性。C语言以其简洁高效、接近底层的优势在系统编程、嵌入式开发等领域广泛应用;而C++则是在C的基础上...

    指令字典(包括汇编语言,c语言,c++语言...)

    C语言的关键特性包括结构化编程、动态内存分配、预处理器宏和指针操作。它的语法简洁,使得C成为许多操作系统和应用程序的基础,如Linux和Unix。 3. **C++语言**:C++是C语言的扩展,由Bjarne Stroustrup开发,引入...

Global site tag (gtag.js) - Google Analytics