动态内存申请与释放

前提条件
如果输入数据时,先告诉你个数,然后再输入,要记录每个数据,这时就要用到动态内存分配。
首先,要引用stdlib.h
你只能要多少个字节为单位的空间,不能说多少个int之类的,所以只能用n*sizeof(int)
它会返回一个void类型的东西。
做完以后,要free它。虽然说,对于小程序没写free是没问题,但是对于大程序来说,就必定要写free

int *a = (int*)malloc(n*sizeof(int));
free(a);

注意:一定要将malloc的空间变成指针类型
没空间后会怎么样?
会返回0,或者叫做NULL
那系统能给你多大的空间?
其实,你可以这样做

#include <stdio.h>
#include <stdlib.h>
int main() {
    int *p;
    int cnt = 0;
    while (p = (int *)malloc(100 * 1024 * 1024)) {
        cnt++;
    }
    printf("分配了%d00MB的空间\n", cnt);
 }

如何理解malloc的用法
可以这样记
帮我malloc n个sizeof(valueType)的空间,并将其强制转化为什么类型的指针(valueType *),最后让一个指针变量指向它。
注意
free你只能free你借到的部分,别的不行,但是free(NULL)可以。因为每写一个指针,就要初始化一次。
所以,你每写一个malloc,就要写一个free
但是不能free,再free,因为会崩溃。
地址变了也不能free

  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mryan2005

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值