malloc()和free()

为数组动态分配存储空间

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

double *ptd;

int max;

int number;

int i=0;

puts("What is the maximum number of type double entries?");

scanf("%d",&max);

ptd =(double *)malloc(max * sizeof (double));

if(ptd == NULL)

{

puts("Memory allocation failed.Goodbye.");

exit(EXIT_FAILURE);

}

puts("Enter the values(q to quit): ");

while(i<max && scanf("%1f",&ptd[i])==1)

i++;

printf("Here are your %d entries:\n.",number = i);

for(i=0;i<number;i++)

{

printf("%7.2f",ptd[i]);

if(i%7 == 6)

putchar(‘\n‘);

}

if(i%7 != 0)

{

putchar(‘\n‘);

}

puts("Done.");

free(ptd);

while(1);

return 0;

}

对应每一个malloc()调用,应该进行一次free()。函数free()的参数是先前malloc()返回的地址,它释放先前分配的内存。这样,所分配内存持续的时间是从调用malloc()分配内存开始,到调用内存给程序使用,每次调用free()分配释放内存一共再使用为止。

时间: 2024-10-25 03:11:33

malloc()和free()的相关文章

关于malloc和sizeof的用法

问题1: 1.L.elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType)); 2.newbase = (ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)); 其中L是已经定义的线性表,LIST_INIT_SIZE是线性表存储空间的初始分配量,listsize是当前分配的存储容量(以sizeof(ElemType)为单位) 解释: 第一个句子:用ma

malloc calloc 和 realloc

realloc()函数 原型:extern void *realloc(void *mem_address, unsigned int newsize); 语法:指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小). 头文件:#include <stdlib.h> 有些编译器需要#include <alloc.h>,在TC2.0中可以使用alloc.h头文件 功能:先按照newsize指定的大小分配空间,将原有数据从头到尾拷贝到新分配的内存区域,而后释放原来me

malloc和free的内存到底有多大?——GNU glib库

大家应该都比较熟悉这一点:malloc分配的内存一定大于用户指定的大小!而且很多人也问过这样的问题:到底大多少?以及实际上malloc到底分配了多少? 我们知道这个大小一定在某个"神奇"地方记录着,但是就像自己的"思维"一样,你确无法感知!不过,这是错觉,只是我们习惯了只使用,而没有深入剖析源码,在这里我将揭开这个面纱,去掉其透明化! 声明:源码基于GNU glib库的2.7版本的malloc目录下相关文件 再声明:不同的C库实现方式不一定一样,这里是glib库,如

单向链表 malloc与free

1 这个是头文件,建立成.h 2 3 #include "windows.h" 4 #include "malloc.h"//使用函数malloc,必须要导入这个头文件. 5 6 7 8 //创建普通的一个类型为USER的结构体 9 struct USER 10 { 11 DWORD nID; //因为这里使用了windows.h 的头文件 12 CHAR nNAME[0X20]; //DWORD CHAR 都是一个宏. 13 DWORD nLEVEL; //typ

new/delete 与 malloc/free的区别

一.概述 在C++中,申请动态内存与释放动态内存用new/delete 与 malloc/free都可以,而且他们的存储方式相同,new/malloc申请的动态内存位于堆中,无法被操作系统自动回收,需要对应的delete也free释放空间. malloc/free是C/C++语言的标准库函数,在C语言中需要头文件#include<stdlib.h>的支持.而new/delete是C++的运算符.对于类对象而言,malloc/free无法满足动态对象的要求,对象要求在创建的同时自动执行构造函数,

malloc创建三维数组,f[0],f[i][0],f[i][j][0]记录每维总数

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <malloc.h> 4 5 int main() 6 { 7 //f[0],f[][0]记录总数 8 //etc.有f[0]种等级的房间,f[i]代表第i种等级 9 //第i个等级的房间有f[i][0]间房间,f[i][j]代表第i种等级的第j个房间 10 //第f[i][j]个房间有f[i][j][0]张床 11 //f[i][j][k]为第i个等级的房间,第

静态链表 初始化 定位 Malloc Free 插入 删除

#include <stdio.h> #include <stdlib.h> #define OK 1 #define TRUE 1 #define ERROR -1 #define FALSE -1 #define OVERFLOW -2 #define ElemType int #define Status int typedef int ElemType typedef int Status #define MAX_SIZE 1000;//表最大空间 /* //线性表的基本操

c语言内存分配-malloc

malloc 原型:(原来返回类型是char) 1 extern void *malloc(unsigned int num_bytes); 头文件: 1 #include <stdlib.h> 2 #include <malloc.h> 函数声明: void *malloc(size_t size); 返回值: 分配成功:返回被分配内存的指针 失败:返回NULL 不再使用时,可用free()函数释放内存 使用: 1 int *p,*s; 2 p=(int*)malloc(size

new 与malloc的区别

  1.申请的内存所在的位置 new操作符从自由存储区上为对象动态分配内存空间,malloc从堆上动态分配内存. 自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行进行内存申请,该内存即为自由存储区.而堆是操作系统所维护的一块特殊内存,用于程序的动态分配.C语言使用malloc从堆上分配内存,使用free释放已分配的内存. 而自由存储区不仅可以是堆,还可以是静态存储区,这都看operator new在哪里为对象分配内存. 2.返回类型的安全性 new 内存分配成功时,返回

浅谈C中的malloc和free

在C语言的学习中,对内存管理这部分的知识掌握尤其重要!之前对C中的malloc()和free()两个函数的了解甚少,只知道大概该怎么用——就是malloc然后free就一切OK了.当然现在对这两个函数的体会也不见得多,不过对于本文章第三部分的内容倒是有了转折性的认识,所以 写下这篇文章作为一个对知识的总结.这篇文章之所以命名中有个“浅谈”的字眼,也就是这个意思了!希望对大家有一点帮助! 如果不扯得太远的话(比如说操作系统中虚拟内存和物理内存如何运做如何管理之类的知识等),我感觉这篇文章应该是比较