动态内存分配(c语言)

当声明一个数组时,它所需要的内存将在编译时就被分配。但是,数组的长度在运行时才知道。它所需要的空间取决于输入的数据。所以,存在某一个数组实际所占的内存超过编译器所分配的内存。这时候,程序就会出现问题。所以,我们可以使用动态内存分配。所谓动态内存分配即为在运行时为它分配内存。

动态内存分配函数有:malloc,calloc,realloc,free。

函数所在的头文件:#include <stdlib.h>

函数原型:

void *malloc( size_t size );//字节数

void *calloc( size_t num, size_t size );

//第一个参数为元素个数,第二个为每个元素的字节数

void *realloc( void *memblock, size_t size );

//第一个参数为已开辟的内存块的地址, 第二个为字节数

void free( void *memblock );

malloc用于动态开辟内存,这块内存并没有初始化。

calloc也用于动态开辟内存,与malloc最大的区别是在返回这块内存的地址之前将其初始化为0。

realloc用于修改原来开辟的内存的大小。如果扩大一个内存块,这个内存原来的内容块保持不变,新的内存增加到在原来的内存块后面,但并为初始化。若缩小一个内存块,原来的内存的尾部部分被拿掉。剩余部分内存上的内容保持。

注:(1)当动态开辟内存时,在使用之前应先判断是否开辟成功。(即是否为NULL)

(2)所有由动态开辟的内存都必须用free来释放空间。

(3)不可多次释放动态开辟的空间。

(4)不可解引用NULL指针。

(1)malloc和free

(2)calloc和free

(3)realloc和free

时间: 2024-10-27 12:56:12

动态内存分配(c语言)的相关文章

C语言学习笔记--动态内存分配

1. 动态内存分配的意义 (1)C 语言中的一切操作都是基于内存的. (2)变量和数组都是内存的别名. ①内存分配由编译器在编译期间决定 ②定义数组的时候必须指定数组长度 ③数组长度是在编译期就必须确定的 (3)但是程序运行的过程中,可能需要使用一些额外的内存空间 2. malloc 和 free 函数 (1)malloc 和 free 用于执行动态内存分配的释放 (2)malloc 所分配的是一块连续的内存 (3)malloc 以字节为单位,并且返回值不带任何的类型信息:void* mallo

数据结构基础(1)--数组C语言实现--动态内存分配

数据结构基础(1)--数组C语言实现--动态内存分配 基本思想:数组是最常用的数据结构,在内存中连续存储,可以静态初始化(int a[2]={1,2}),可以动态初始化 malloc(). 难点就是数组在删除或者插入元素的时候,要移动元素的坐标不好确定.规律: 1.如果要在数组中第pos个位置插入一个元素(应该从后面开始移动) for( i=cnu;i>=pos;i--) pBase[i]=pBase[i-1]; 2.删除数组第pos位置的元素 for(i=pos+1;i<=cnu;i--)

【C语言天天练(九)】动态内存分配

引言:数组的元素存储于内存中连续的位置上.当一个数组被声明时.它所须要的内存在编译时就被分配. 可是,我们能够使用动态内存分配在执行时为它分配内存. 一块内存的生命周期能够分为四个阶段:分配.初始化.使用.释放. 内存的分配一般使用C函数库里的malloc函数(原型:void *malloc(size_t size)). 关于malloc函数应该注意一下几点: 1.malloc的參数就是须要分配的内存的字节数. 2.malloc所分配的是一块连续的内存. 3.分配成功.则返回指向分配内存起始地址

重拾c语言之动态内存分配

动态内存分配 传统数组的缺点: 1数组长度必须事先制定,且仅仅能是长整数不能是变量 2传统形式定义的数组该数组的内存程序无法手动释放 3数组一旦定义,系统就会为该数组分配的存储空间就会一直存在直到该函数执行结束 4数组的长度不能再函数的执行的过程中动态的扩充或者缩小 5不能跨函数使用 为什么须要动态分配内存 动态内存分配内存举例--动态数组的构造 静态内存分配和动态内存分配 跨函数使用内存的问题 #include<stdio.h> void f(void) { int a[5]={0,1,2,

C++动态内存分配

笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D实战核心技术详解>电子工业出版社等. CSDN视频网址:http://edu.csdn.net/lecturer/144 C / C ++中的动态内存分配是指程序员手动执行内存分配, 动态分配的内存分配给堆,非静态和局部变量获取在Stack上分配的内存.详情查看上篇博文:C程序的内存布局. 什么是应用程序? 动态分配的

动态内存分配

1.C语言中的一切操作都是基于内存的 2.变量和数组都是内存的别名,如何分配这些内存由编译器在编译期间决定,定义数组的时候必须指定数组长度,而数组长度是在编译期就必须决定的 需求: 程序运行的过程中,可能需要使用一些额外的内存空间. malloc和free用于执行动态内存分配和释放. 1.malloc所分配的是一块连续的内存,以字节为单位,并且不带任何的类型信息 2.free用于将动态内存归还系统 注意: 1.malloc实际分配的内存可能会比请求的稍微多一点,但是不能依赖于编译器的这个行为 2

动态内存分配(c++)

内存分配方式 (1)从静态存储区域分配.内存在编译的时候就已经分配好了,在整个程序执行运行期间一直存在.如:全局变量,static变量. (2)在栈上创建.在执行函数时,函数内部的局部变量的存储单元在栈上创建.函数执行结束后局部变量的存储单元自动释放. (3)在堆上创建.也称动态内存分配.程序在运行的时候用new或malloc申请任意的内存,程序员自己负责何时用delete或free释放内存. 我们都知道c语言开辟以及释放空间用malloc和free.而在c++中却用new和delete.. 这

动态内存分配类实现

今天学习了C++语言的内存动态分配,并借助所学的知识实现了一个动态内存分配类. 问题的背景为:在已经实现了一个点类的基础上,实现一个动态内存分配类,这个类 的功能为:实现根据输入的数目size,动态的生成size个点类对象:并在提供一个借口 可以对pos位置的对象进行操作:在对象生存期结束时,可以自动释放分配的内存空间. 根据描述的问题描述的需求,规划了如下的类图: 写出了一个包含三个方法的对点动态分配内存的类: 1: #ifndef _ARRAYOFPOINTS_H 2: #define _A

动态内存分配实例

1.#include <stdio.h>#include <malloc.h> int main(){    int i = 0;    int* pI = (int*)malloc(5 * sizeof(int));    short* pS = (short*)calloc(5, sizeof(short));        for(i=0; i<5; i++)    {        printf("pI[%d] = %d, pS[%d] = %d\n&quo