mallo函数
malloc的全称是memory allocation,中文叫动态内存分配,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存。原型为extern void *malloc(unsigned int num_bytes)。
1函数简介
原型
头文件
功能
返回值
说明
名称解释
相关函数
2函数声明
全名
备注
3与new的区别
int *p; p=newint; //返回类型为int*类型(整数型指针),分配大小为sizeof(int); |
int *parr; parr=newint[100]; //返回类型为int*类型(整数型指针),分配大小为sizeof(int)*100; |
int *p; p=( int *) malloc ( sizeof ( int )*128); //分配128个(可根据实际需要替换该数值)整型存储单元, //并将这128个连续的整型存储单元的首地址存储到指针变量p中 double *pd=( double *) malloc ( sizeof ( double )*12); //分配12个double型存储单元, //并将首地址存储到指针变量pd中 |
type*p; if (NULL==(p=(type*) malloc ( sizeof (type)))) /*请使用if来判断,这是有必要的*/ { perror ( "error..." ); exit (1); } ... /*其它代码*/ free (p); p=NULL; /*请加上这句*/ |
int *p=( int *) malloc ( sizeof ( int )*100); //分配可以放得下100个整数的内存空间。 |
char *ptr; if ((ptr=( char *) malloc (0))==NULL) puts ( "Gotanullpointer" ); else puts ( "Gotavalidpointer" ); |
4工作机制
5程序示例
正常程序
typedefstructdata_type{ intage; charname[20]; }data; data*bob=NULL; bob=(data*) malloc ( sizeof (data)); if (bob!=NULL) { bob->age=22; strcpy (bob->name, "Robert" ); printf ( "%sis%dyearsold\n" ,bob->name,bob->age); } else { printf ( "mallocerror!\n" ); exit (-1); } free (bob); bob=NULL; |
内存泄漏实例
例1: #include<stdio.h> #include<malloc.h> #defineMAX100000000 intmain( void ) { int *a[MAX]={NULL}; inti; for (i=0;i<MAX;i++){ a[i]=( int *) malloc (MAX); } return0; } |
#include"stdio.h" #include"malloc.h"//malloc()函数被包含在malloc.h里面 intmain( void ) { char *a=NULL; //声明一个指向a的char*类型的指针 a=( char *) malloc (100* sizeof ( char )); //使用malloc分配内存的首地址,然后赋值给a if (!a) //如果malloc失败,可以得到一些log { perror ( "malloc" ); return -1; } sprintf (a, "%s" , "HelloWorld\n" ); //"HelloWorld\n"写入a指向的地址 printf ( "%s\n" ,a); //输出用户输入的数据 free (a); //释放掉使用的内存地址 return0; //例2有无内存泄露? } =============================== 例1: 对 malloc 申请之后没有检测返回值; 例2: 检测 malloc 返回值条件有误。 |
mallo函数的更多相关文章
- C/C++语言的标准库函数malloc/free与运算符new/delete的区别
概括地说 1.malloc与free是C++/C的标准库函数,new/delete是C++的运算符,它们都可用于申请动态内存和释放内存. 2.对于非内部数据类型的对象而言,只用malloc/free无 ...
- C++/C语言的标准库函数与运算符的区别new/delete malloc/free
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符.它们都可用于申请动态内存和释放内存.下面来看他们的区别. 一.操作对象有所不同 malloc与free是C++ ...
- 关于malloc/free用法
和很多人一样,我一直觉得new/delete和malloc/free的用法很随意,直到我真正遇到了麻烦,才想着去好好区分一下. (1)首先mallo函数原型void* malloc(size_t).头 ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- 探究javascript对象和数组的异同,及函数变量缓存技巧
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来 ...
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- C++对C的函数拓展
一,内联函数 1.内联函数的概念 C++中的const常量可以用来代替宏常数的定义,例如:用const int a = 10来替换# define a 10.那么C++中是否有什么解决方案来替代宏代码 ...
- 菜鸟Python学习笔记第一天:关于一些函数库的使用
2017年1月3日 星期二 大一学习一门新的计算机语言真的很难,有时候连函数拼写出错查错都能查半天,没办法,谁让我英语太渣. 关于计算机语言的学习我想还是从C语言学习开始为好,Python有很多语言的 ...
- javascript中的this与函数讲解
前言 javascript中没有块级作用域(es6以前),javascript中作用域分为函数作用域和全局作用域.并且,大家可以认为全局作用域其实就是Window函数的函数作用域,我们编写的js代码, ...
随机推荐
- SQL Server ->> EXECUTE AS LOGIN/USER和Revert表达式
EXECUTE AS LOGIN/USER和Revert表达式都是从SQL Server 2005就有.Revert的作用是用于切换当前过程的执行上下文返回上一个EXECUTE AS 语句发生之前的安 ...
- MVC 使用entity framework 访问数据库 发布IIS
1. SQL SERVER 数据库内容 2. MVC工程 3. EF 参考 工程架构: 对应实体类: public class MvcUser { public int Id { get; set; ...
- [PCL]ApproximateVoxelGrid
点云滤波继承自Filter模板类 注意Filter类的filter 方法调用了虚方法applyFilter: inline void filter (PointCloud &output) { ...
- C++中的explicit关键字
http://www.cnblogs.com/winnersun/archive/2011/07/16/2108440.html 上面链接中的博主写的很好,我也不多说了.举得例子也很好,应该也是看了E ...
- node与Elment以及子节点childrenNode与children的区别(2)
测试代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 【转】lonekight@xmu·ACM/ICPC 回忆录
转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...
- mysql++的release版本当机的问题
今天用mysql++的release写例子,总是当机,仔细查了一下,发现在编mysqlpp库的时候,代码生成设置成了MDD,改成MD就好了.
- 二叉查找树的Java实现
为了克服对树结构编程的恐惧感,决心自己实现一遍二叉查找树,以便掌握关于树结构编程的一些技巧和方法.以下是基本思路: [1] 关于容器与封装.封装,是一种非常重要的系统设计思想:无论是面向过程的函数,还 ...
- Notepad++的列编辑功能
转自:http://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htmls/index.html http://www.crifan.c ...
- (原创)关于SQL Server 2005 的自动远程数据库备份
由于项目需要,需要对目标服务器上的数据库每天进行备份并转移,查阅网上的一些帮助,结合自己的实际需要,写了这篇文章,希望对有同样需求的朋友有所帮助.目标服务器:192.168.1.197,备份服务器:1 ...