malloc函数

  • 原型:extern void* malloc(unsigned int size);
  • 功能:动态分配内存;
  • 注意:size仅仅为申请内存字节大小,与申请内存块中存储的数据类型无关,故编程时需要通过以下方式给出:"长度 * sizeof(数据类型)";

  • 示例:

//动态分配内存,输入5个数据,并把低于60的值打印出来

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int *ptr = (int *)malloc(5 * sizeof(int));//分配内存

    for (int i = 0; i < 5; i++)
        {
            scanf_s("%d", &ptr[i]);//输入数据
        }

    int min = 60;

    for (int i = 0; i < 5; i++)
    {
        if (min > *(ptr + i))
            printf("%5d", *(ptr + i));//打印出低于60的值
    }
    free(ptr);
    system("pause");
    return 0;
}

free函数

  • 原型:void free(void * ptr);
  • 功能:搭配malloc()函数,释放malloc函数申请的动态内存;
  • 注意:对于free(ptr),若ptr为NULL,则可进行多次释放,若ptr是非空指针,则free对ptr只能进行一次操作,否则程序将崩溃;
  • 示例:见malloc函数;
  • 结果:见malloc函数;

realloc函数

  • 原型: void* realloc(void * ptr,unsigned int size);
  • 功能:先判断当前指针是否有足够的连续空间,若足够,扩大ptr指向的地址并返回,若不够,怎按size指定的大小分配空间,将原数据copy到新分配的内存中,然后释放原ptr所指向区域;
  • 注意:内存使用完毕后,应使用free()函数释放,但原来的指针是自动释放,不需要使用free;

  • 示例:
#include <stdio.h>
#include <stdlib.h>

int main()
{
   char *str;

    /* 一开始的内存分配 */
    str = (char *)malloc(15);
    strcpy(str, "Hello World!");
    printf("String = %s\n", str);

    /* 重新分配内存 */
    str = (char *)realloc(str, 25);
    strcat(str, ", C");
    printf("String = %s\n", str);

    free(str);
    system("pause");
    return 0;
}

calloc函数

  • 原型:void* calloc(unsigned int num,unsigned int size);
  • 功能:为已经分配的内存重新分配空间并复制内容;
  • 注意:num:对象个数,size:对象占据的内存字节数,相较于malloc函数,calloc函数会自动将内存初始化为0;

  • 示例:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int num;
    int i;
    int *ptr;

    printf("元素个数为:");
    scanf("%d", &num);

    ptr = (int*)calloc(num, sizeof(int));
    printf("输入 %d 个数字:\n", num);
    for (i = 0; i < num; i++)
    {
        scanf("%d", &ptr[i]);
    }

    printf("输入的数字为:");
    for (i = 0; i < num; i++) {
        printf("%d ", ptr[i]);
    }
    printf("\n");
    system("pause");
    return 0;
}

创作不易,未经同意,转载请注明出处。

malloc,free,calloc,realloc函数的更多相关文章

  1. C语言中malloc()和calloc()c函数用法

    C语言中malloc()和calloc()c函数用法   函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别. malloc()函数有一个参数,即要分配的内存空间的大小: ...

  2. C/C++ 动态存储分配 malloc calloc realloc函数的用法与区别

    C++内存分配 https://blog.csdn.net/zhangxiao93/article/details/43966425

  3. C 语言中 malloc、calloc、realloc 和free 函数的使用方法

    C标准函数库中,常见的堆上内存管理函数有malloc(), calloc(), recalloc(), free(). 之所以使用堆,是因为栈只能用来保存临时变量.局部变量和函数参数.在函数返回时,自 ...

  4. 动态开内存(malloc与calloc)

    malloc与calloc 1.函数原型 #include<stdlib.h> void *malloc(unsigned int size);     //申请size字节的内存 voi ...

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

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

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

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

  7. C++malloc,calloc,realloc,free函数

    在进行C/c++编程的时候,需要程序员对内存的了解比较清楚,经常需要操作的内存可分为下面几个类别:     1.堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等, ...

  8. C:malloc/calloc/realloc/alloca内存分配函数

    原文地址:http://www.cnblogs.com/3me-linux/p/3962152.html calloc(), malloc(), realloc(), free(),alloca() ...

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

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

随机推荐

  1. 【python爬虫】每天统计一遍up主粉丝数!

    目录 每天统计一遍up主粉丝数! 第一步,爬取up主的粉丝信息 1.首先导入需要的包 2.为了方便,把它写成一个函数 3.那么就调用一下这个函数吧! 4.运行一下,成功啦! 第二,说好的每天统计一遍呢 ...

  2. Extjs 树菜单的自动展开数据的请求

    今天在做extjs开发的时候,在树菜单上遇到了一个坑,也许是我刚接触extjs 不熟的缘故 问题描述:后台设置的树自动展开,但是在前端总是只显示一条数据,但是数据确实都请求到了. 经过几个小时不屑的努 ...

  3. QT多线程中使用QTcpSocket遇到的读写数据问题

    多线程中使用QTcpSocket在run()方法中new QTcpSocket;然后监听readyRead()信号connect(m_pTcpSocket,SIGNAL(readyRead()),th ...

  4. SUCTF 2018——Anonymous(php匿名函数 \x00lambda_)

    题目地址:http://45.76.173.177:23334/ <?php $MY = create_function("","die(`cat flag.php ...

  5. SharePoint Rest Api Caml multiple condition query -Rest api 利用Caml多个条件查询

    $.ajax({ var cquery="<View><Query><Where><And><Geq><FieldRef N ...

  6. 更改用户host留下的坑

    前言:  我们在创建数据库用户的时候都会指定host,即一个完整的用户可描述为 'username'@'host' .创建用户时不显式指定host则默认为%,%代表所有ip段都可以使用这个用户,我们也 ...

  7. javascript之DOM(三Element类型)

    Element类型用于表现XML和HTML的元素,提供了对元素标签名.子节点及特性的访问. 要访问标签名可以使用nodeName和tagName属性,其返回值是一样的. <p id=" ...

  8. elasticsearch 索引和mapping导入导出命令

    导mapping:elasticdump \ --input=http://192.168.102.13:9200/search_v1 \ --output=http://192.168.102.69 ...

  9. 【目录】Jmeter系列

    为天地立心,为生民立命.为往圣继绝学,为万世开太平. ---<横渠四句>·张载 Jmeter(一)简介以及环境搭建 Jmeter(二)Jmeter目录介绍 Jmeter(三)Test-Pl ...

  10. php策略模式(strategy pattern)

    ... <?php /* The strategy pattern defines a family of algorithms, each of which is encapsulated a ...