malloc,calloc,realloc
与堆操作相关的两个函数
malloc
#include<stdio.h>
#include<stdlib.h>
#include<string.h> int main()
{
char *p = malloc(); //内存随机,未做处理 int i;
for(i = ; i < : i++)
{
printf(“%d “,p[i]);
}
free(p);
return ;
}
运行结果:(linux)
exbot@ubuntu:~/wangqinghe/C/20190630$ ./malloc
0 0 0 0 0 0 0 0 0 0
全是0表示分配的这块内存没有用过。
相同的代码在windows环境下运行必须将
char *p = malloc(10);换成 char *p = (char*)malloc(10);
因为malloc分配的地址是指向void*
不更换过来会报 invalid conversion from ‘void*’ to ‘char*’ 的错误
换过后的运行结果如下:

可以在使用malloc之后使用memset函数来初始化该指针指向的地址大小为0或者-1.(memset)只能初始化这两种值。
char *p = malloc(10);
memset(p,0,10); //初始化所有内存为0
calloc
calloc函数可以直接达成这样的效果:分配内存并且同时初始化为0
#include<stdio.h>
#include<stdlib.h>
#include<string.h> int main()
{
//char *p = malloc(10);
char *p = (char*)calloc(,sizeof(char));
int i;
for(i = ; i < ; i++)
{
printf("%d ",p[i]);
}
free(p);
return ;
}

realloc
想要将两个分配的内存块在一起,可以使用realloc函数
在原有内存基础之上,在堆中间增加连续的内存。
如果原有内存没有连续内存可扩展,那么会重新分配一个空间,将原有的内存copy到新空间,然后释放。
#include<stdio.h>
#include<stdlib.h>
#include<string.h> int main()
{
char *p1 = (char*)calloc(,sizeof(char));
char *p2 = (char*)realloc(p1,);
int i;
for(i = ; i < ; i++)
{
printf("%d ",p2[i]);
}
free(p2);
return ;
}
在p1内存的基础上扩充,并且会自动初始化p1内存大小的内存为0;
若p2内存分配大小大于p1,那么多出来的内存则会有随机值。
char *p2 = (char*)realloc(NULL,10) //等同于malloc;
realloc和malloc只分配内存,不处理。
malloc,calloc,realloc的更多相关文章
- malloc,calloc,realloc,alloc
三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(si ...
- malloc,calloc,realloc函数用法,原理及不同解析
https://blog.csdn.net/lixungogogo/article/details/50887028 一.malloc malloc在MSDN中原型为: void *malloc( s ...
- 【C/C++开发】malloc,calloc和realloc的区别和注意事项
(1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量. <2&g ...
- 【转】【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
转自:http://www.cnblogs.com/particle/archive/2012/09/01/2667034.html#commentform malloc: 原型:extern voi ...
- Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解
C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...
- C语言 malloc、calloc、realloc的区别
三个函数的申明分别是: void* malloc(unsigned size); void* realloc(void* ptr, unsigned newsize); void* calloc(si ...
- malloc、calloc、realloc的区别
(1)C语言跟内存分配方式 <1>从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...
- malloc、calloc、realloc三者的差别
1.malloc 作用:分配内存块 原型:void *malloc(size_t size);size表示要分配的字节数 返回值:返回一个指向所分配空间的void指针,假设没有足够的内存可用,则返回N ...
- C/C++中的malloc、calloc和realloc
1. malloc 原型:extern void *malloc(unsigned int num_bytes); 头文件:Visual C++6.0中可以用malloc.h或者stdlib.h 功能 ...
随机推荐
- # 组合数学-组合数+lacus定理
目录 数论-组合数+lacus定理 组合数计算 lacus定理-大组合数取模 数论-组合数+lacus定理 组合数计算 为避免爆long long,\(20!\)就达到了long long 的范围,采 ...
- c语言:<tchar.h>
头文件“<tchar.h>”作用就是为了进行ASCII码和UNICODE(wide-character)码的头文件(该头文件由微软提供): 这样我们就可以使用TCHAR.H头文件中的定义的 ...
- multivariate_normal 多元正态分布
多元正态分布 正态分布大家都非常熟悉了,多元正态分布就是多维数据的正态分布,其概率密度函数为 上式为 x 服从 k 元正态分布,x 为 k 维向量:|Σ| 代表协方差矩阵的行列式 二维正态分布概率密度 ...
- Java NIO浅析 转至 美团技术团队
出处: Java NIO浅析 NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服 ...
- python爬虫简介
一.什么是网络爬虫? 网络爬虫,是一种按照一定规则,自动的抓取万维网信息的程序或者脚本. 二.python网络爬虫, 需要用到的第三方包 requests和BeautifulSoup4 pip ins ...
- 【原创】运维基础之Nginx(3)location和rewrite
nginx location =:精确匹配(必须全部相等) ~:大小写敏感,正则匹配 ~*:忽略大小写,正则匹配 ^~:只需匹配uri部分,精确匹配 @:内部服务跳转,精确匹配 优先级: Exact ...
- pat (B)_1002
1002 写出这个数 (20 分) 读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字. 输入格式: 每个测试输入包含 1 个测试用例,即给出自然数 n 的值.这里保证 n 小于 1 ...
- linux库(程序)与包名联系
一般地,dev为相关开发库包. curses--cursor optimization光标优化--libncurses5-dev 现在常用的是new curses(ncurses). 在ubuntu中 ...
- python-装饰(高阶函数)
python-装饰(高阶函数) 高阶函数 1.把一个函数名当做实参传给另外一个函数(在不修改被装饰函数源代码) 2.返回值 中包含函数名 高阶函数实现1的功能 def bar(): print(&qu ...
- 你所不知的VIM强大功能
1. 可视化区块(Visual Block) (1)cd ~ 切换到自己的家目录(本范例中为root用户) (2)touch test1 test2 建立两个文件做演示(3)last > tes ...