与堆操作相关的两个函数

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的更多相关文章

  1. malloc,calloc,realloc,alloc

    三个函数的申明分别是: void* realloc(void* ptr, unsigned newsize); void* malloc(unsigned size); void* calloc(si ...

  2. malloc,calloc,realloc函数用法,原理及不同解析

    https://blog.csdn.net/lixungogogo/article/details/50887028 一.malloc malloc在MSDN中原型为: void *malloc( s ...

  3. 【C/C++开发】malloc,calloc和realloc的区别和注意事项

    (1)C语言跟内存分配方式 <1>从静态存储区域分配.        内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量. <2&g ...

  4. 【转】【C/C++】内存分配函数:malloc,calloc,realloc,_alloca

    转自:http://www.cnblogs.com/particle/archive/2012/09/01/2667034.html#commentform malloc: 原型:extern voi ...

  5. Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解

    C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...

  6. C语言 malloc、calloc、realloc的区别

    三个函数的申明分别是: void* malloc(unsigned size); void* realloc(void* ptr, unsigned newsize); void* calloc(si ...

  7. malloc、calloc、realloc的区别

    (1)C语言跟内存分配方式 <1>从静态存储区域分配.       内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量.static变量.<2> ...

  8. malloc、calloc、realloc三者的差别

    1.malloc 作用:分配内存块 原型:void *malloc(size_t size);size表示要分配的字节数 返回值:返回一个指向所分配空间的void指针,假设没有足够的内存可用,则返回N ...

  9. C/C++中的malloc、calloc和realloc

    1. malloc 原型:extern void *malloc(unsigned int num_bytes); 头文件:Visual C++6.0中可以用malloc.h或者stdlib.h 功能 ...

随机推荐

  1. VMware Workstation改动存储位置之后,软件变成全英文,修改成中文的方法

    今天想改动一下VMware Workstation的位置  改动之后打开软件,本来的中文改成了英文,整了很长时候,最后发现是因为改动一下位置之后,虽然zh_CN语言包还在,但是Vmware找不到本来的 ...

  2. KMP(next数组的更新理解)Codeforces Round #578 (Div. 2)--Compress Words

    题目链接:https://codeforc.es/contest/1200/problem/E 题意: 有n串字符串,让你连起来:sample please ease in out   ---> ...

  3. vscode中eslint插件的配置-prettier

    用vue-cli构建vue项目,会有个eslint代码检测的安装 可vscode自带代码格式化是prettier格式(右键有格式化文件或alt+shift+f) 这时候要在vscode上装一个esli ...

  4. JS基础_标识符

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 分布式的几件小事(十一)分布式session如何实现

    1.分布式会话是什么? 首先,我们知道浏览器有个cookie,在一段时间内这个cookie都存在,然后每次发请求过来都带上一个特殊的jsessionid cookie,就根据这个东西,在服务端可以维护 ...

  6. Axure(一)

    axure1.原型工具 2.软件开发 1.可行性分析2.需求分析    产品经理(和甲方对接需求,)    乙方     --   甲方 ps(专业性强,精美)  设计师        html(可变 ...

  7. 记一次nodemanager无法启动的情况

    早上看CDH发现有一个nodemanager挂掉 然后查看对应的日志. 发现在日志里面并没有错误.,然然后发现服务器的磁盘满了,赶紧清理磁盘空间 清理磁盘的时候发现主要是/tmp目录下面生成了很多  ...

  8. Storm项目开发纪要

    1.POM引用storm-core和javax.servlet-api这两个组件,如果本地模式跑拓扑,要把<scope>provided</scope>去掉:如果远程发布运行, ...

  9. centos7.3安装docker

    一.写随笔的原因:最近在阿里云上买了个centos7.3服务器,想将一些demo运行在上面,所以需要做一些环境的安装,通过此篇文章MAKR一下.下面来记录下安装步骤(参考网上的一些教程,有坑的话会实时 ...

  10. Hive分区表创建、分类

    一.分区表创建与说明 必须在表定义时创建partition a.单分区建表语句:create table day_table (id int, content string) partitioned ...