一、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++动态内存分配如堆,栈,数据段
本章首先介绍程序运行时动态内存分配(dynamic memory allocation)的概念与方法。到目前为止,本教材介绍的程序设计中,变量和对象在内存中的分配都是编译器在编译程序时安排好了的,这带来了极大的不便,如数组...
c++动态分配内存的介绍,对c++内存有很好的介绍
C++中动态内存分配引发问题的解决方案 C++中动态内存分配引发问题的解决方案
C语言+C++视频教程百度网盘下载C语言+C++视频教程百度网盘下载C语言+C++视频教程百度网盘下载C语言+C++视频教程百度网盘下载C语言+C++视频教程百度网盘下载
C和C++语言笔试面试题汇总.doc C和C++语言笔试面试题汇总.doc C和C++语言笔试面试题汇总.doc C和C++语言笔试面试题汇总.doc C和C++语言笔试面试题汇总.doc C和C++语言笔试面试题汇总.doc C和C++语言笔试面试题汇总....
动态内存分配 操作系统 实验报告 C++
用C++实现 vector 分配内存 避免溢出
这是一个纯虚的函数, MemMgr的两个子类FirstAdapter(首次适应算法),OptiAdapter(最佳适应算法)分别实现了那个纯虚函数, 表示了当有size大小的内存分配需求时, 所采取的不同分配算法, 如果还有其他的分配算法,...
c语言和c++语言面试题,软件工程师面试题
C++内存分配
对于c++动态分配内存问题对于初学者来说是一件很头痛的事,本文档详细讲述该类问题,令初学者恍然大悟!其实非常简单1
C++动态内存分配 ,为C++软件工程师提供对内存的管理的了解.
动态分区分配方式的模拟C语言代码和C++代码.pdf
c++五种分配内存 c++五种分配内存 c++五种分配内存 c++五种分配内存
一道经典的作业题,耗费我无数昼夜,在这里拿出来给大家分享下
C++动态内存分配(new/new[]和delete/delete[])详解 为了解决这个普通的编程问题,在运行时能创建和销毁对象是基本的要求。当然,C已提供了动态内存分配函数malloc( )和free( ),以及malloc( )的变种(realloc:改变...