malloc、free介绍

1.free

C++ 中的free() 函数释放先前使用 calloc、malloc 或 realloc 函数分配的内存块,使其可用于进一步分配。

free() 函数不会改变指针的值,即它仍然指向同一个内存位置。

该函数在<cstdlib> 头文件中定义。

参数:

  • ptr: 指向先前使用 malloc、calloc 或 realloc 分配的内存块的指针。指针可能为空,也可能不指向由 calloc、malloc 或 realloc 函数分配的内存块。
    • 如果 ptr 为空,free() 函数什么也不做。
    • 如果 ptr 不指向由 calloc、malloc 或 realloc 函数分配的内存块,则会导致未定义的行为。

2.malloc

中文叫动态内存分配,用于申请一块连续的指定大小的内存块区域以void*类型返回分配的内存区域地址,当无法知道内存具体位置的时候,想要绑定真正的内存空间,就需要用到动态的分配内存,且分配的大小就是程序要求的大小。

头文件:

#include<malloc.h>或者#include<alloc.h>两者的内容是完全一样的

2、malloc和new

new返回指定类型的指针,并且可以自动计算所需要的大小。

int *p;
p = new int;//返回类型为int* ,分配的大小是sizeof(int)
p = new int[100];//返回类型是int*类型,分配的大小为sizeof(int)*100

而malloc需要我们自己计算字节数,并且返回的时候要强转成指定类型的指针。

int *p;
p = (int *)malloc(sizeof(int));

(1)malloc的返回是void*,如果我们写成了:p=malloc(sizeof(int));间接的说明了(将void转化给了int*,这不合理)

(2)malloc的实参是sizeof(int),用于指明一个整型数据需要的大小,如果我们写成p=(int*)malloc(1),那么可以看出:只是申请了一个一个字节大小的空间。

(3)malloc只管分配内存,并不能对其进行初始化,所以得到的一片新内存中,其值将是随机的。一般意义上:我们习惯性的将其初始化为NULL,当然也可以使用memset函数。

 3.示例

#include <iostream>
#include <cstdlib>
using namespace std;

int main()
{
    int *ptr;
    ptr = (int*) malloc(5*sizeof(int));
    cout << "Enter 5 integers" << endl;

    for (int i=0; i<5; i++)
    {
    // *(ptr+i) can be replaced by ptr[i]
        cin >> *(ptr+i);
    }
    cout << endl << "User entered value"<< endl;

    for (int i=0; i<5; i++)
    {
        cout << *(ptr+i) << " ";
    }
    free(ptr);

    /* prints a garbage value after ptr is free */
    cout << "Garbage Value" << endl;

    for (int i=0; i<5; i++)
    {
        cout << *(ptr+i) << " ";
    }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值