动态开内存(malloc与calloc)
malloc与calloc
1.函数原型
#include<stdlib.h>
void *malloc(unsigned int size); //申请size字节的内存
void *calloc(unsigned int num, unsigned size); //申请num*size字节的内存
2.函数的返回值为void*类型,使用时需强制转换为所需要的类型;
如果内存申请失败,则返回NULL,所以使用申请到的内存时需要先进行判断。
如:char* p = (char*)malloc(6 * sizeof(char));
3.申请的内存位于堆中,不再需要使用时,需调用free函数释放
void free(void *p);
注意:
1.void *与NULL是完全不同的两个概念
int *p=NULL;
void *p;
2.malloc与数组的比较:
(1)传给malloc函数的实参可以是一个表达式,从而可以“动态”申请一块内存;
(2)使用malloc函数申请的内存可以从函数中返回;而使用数组则不可以(存放在栈中,当函数返回时,栈内存已经被释放),示例代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char* func1();
char* func2();
char* pf1;
char* pf2;
pf1 = func1();
pf2 = func2();
printf("%s\n", pf1); //输出f1
printf("%s\n", pf2); //输出乱码,错误信息-返回局部变量的地址
} char* func1()
{
char* p = (char*)malloc( * sizeof(char));
if (p)
{
p[] = 'f';
p[] = '';
p[] = '\0';
return p;
}
return NULL;
} char* func2()
{
char p[] = "f2";
return p;
}
动态开内存(malloc与calloc)的更多相关文章
- 【转】【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
转自:http://www.cnblogs.com/particle/archive/2012/09/01/2667034.html#commentform malloc: 原型:extern voi ...
- 内存控制篇calloc free getpagesize malloc mmap munmap
calloc(配置内存空间) 相关函数 malloc,free,realloc,brk 表头文件 #include <stdlib.h> 定义函数 void *calloc(size_t ...
- 嵌入式-C语言基础:malloc动态开辟内存空间
#include<stdio.h> #include<stdlib.h> int main() { // char *p;//定义一个野指针:没有让它指向一个变量的地址 // ...
- Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解
C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...
- CF731C Socks并查集(森林),连边,贪心,森林遍历方式,动态开点释放内存
http://codeforces.com/problemset/problem/731/C 这个题的题意是..小明的妈妈给小明留下了n只袜子,给你一个大小为n的颜色序列c 代表第i只袜子的颜色,小明 ...
- 关于动态内存malloc和realloc
1.malloc 1.申请的内存长度可以运行时决定,单位是字节 2.申请的内存为连续的内存空间 3.返回的地址可以根据实际需要强转成对应的类型 4.动态申请内存的生命周期是整个程序,除非手动 ...
- C语言中malloc()和calloc()c函数用法
C语言中malloc()和calloc()c函数用法 函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别. malloc()函数有一个参数,即要分配的内存空间的大小: ...
- [reprint]malloc与calloc的区别
[http://blog.163.com/crazy20070501@126/] 转自某自由人的博客: malloc与calloc的区别 函数malloc()和calloc()都可以用来动态分配内存空 ...
- malloc、calloc、realloc的区别
(1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...
随机推荐
- tomcat配置多个数据源
应用场景: 公司tomcat服务器中运行着多个工程,工程链接的mysql数据库不同,所以每个工程的Spring总配置文件中都配置了数据源. 需求: 将数据源统一拿到tomcat中配置. 本来指派给 ...
- 一篇文章让你理解Ceph的三种存储接口(块设备、文件系统、对象存储)
“Ceph是一个开源的.统一的.分布式的存储系统”,这是我们宣传Ceph时常说的一句话,其中“统一”是说Ceph可以一套存储系统同时提供块设备存储.文件系统存储和对象存储三种存储功能.一听这句话,具有 ...
- Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的
前言 用c#开发的时候,新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数,如Awake,Start, Update, OnDestroy等. 在相应的方法中实现游戏 ...
- SQL Server温故系列(5):SQL 查询之分组查询 GROUP BY
1.GROUP BY 与聚合函数 2.GROUP BY 与 HAVING 3.GROUP BY 扩展分组 3.1.GROUP BY ROLLUP 3.2.GROUP BY CUBE 3.3.GROUP ...
- Atlassian In Action-Jira之指导思想(一)
太上,不知有之:其次,亲而誉之:其次,畏之:其次,侮之.信不足焉,有不信焉.悠兮,其贵言.功成事遂,百姓皆谓"我自然". --<道德经> 研发管理或者系统工具的指导思想 ...
- spark入门(三)键值对操作
1 简述 Spark为包含键值对类型的RDD提供了一些专有的操作.这些RDD被称为PairRDD. 2 创建PairRDD 2.1 在sprk中,很多存储键值对的数据在读取时直接返回由其键值对数据组成 ...
- django基础知识之定义模型:
定义模型 在模型中定义属性,会生成表中的字段 django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django会为 ...
- 第三章.定制专属的kali
1.更新升级 • apt-get update • apt-get upgrade • apt-get dis-upgrade 2.根据个人喜好需求安装软件包 • 库 • Apt-get命令 • ...
- OpenCV多版本切换和配置--opencv 安装与卸载、添加 opencv_contrib modules 以及 OpenCv 多版本切换
1. 查看安装Opencv的版本.以及libs和cflags $ pkg-config --modversion opencv $ pkg-config --cflags opencv // 编译链接 ...
- 【字符串】P2084 进制转换-C++
题目描述 今天小明学会了进制转换,比如(10101)2 ,那么它的十进制表示的式子就是 : 1*2^4+0*2^3+1*2^2+0*2^1+1*2^0, 那么请你编程实现,将一个M进制的数N转换成十进 ...