c语言 动态内存规划

内存分区以及功能

内存分配图
在这里插入图片描述
各区功能特点 以 堆区 栈区 介绍
栈区
在这里插入图片描述
堆区
在这里插入图片描述

动态内存分配

戳这里内存分配办法

动态内存分配函数

malloc和 free

  1. 动态内存开辟
int main()
{
	int* pf1 = NULL;
	int* pf2 = NULL;
	pf1 = malloc(100);  // 可移植性低
	pf2 = malloc(10 * sizeof(int)); // 可移植性高
	return 0;
}

注意:
每开辟一次动态内存 都需要判断一次是否为空指针

if (pf1 == NULL)
	{
		printf("out of");
		return 1;
	}

开辟一次,判断一次。

  1. 动态内存使用

动态内存使用方法和数组一样。但是不可以指针越界。

#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>
#include<stdlib.h>


int main()
{
	int* pf1 = NULL;
	int* pf2 = NULL;
	pf1 = malloc(100);  // 可移植性低
	pf2 = malloc(10 * sizeof(int)); // 可移植性高
	if (pf2 == NULL)
	{
		printf("out of");
		return 1;
	}
	for (int i = 0; i < 10; i++)
	{
		*(pf2 + i) = i;
	}
     free(pr2);
	return 0;
}

总结

  1. 数组在被声明是必须知道大小。动态内存开辟允许程序在运行的时候才知道开辟多少空间。
  2. malloc的参数是多少字节 而且开辟的内存是未经过初始化的。
  3. calloc的参数是每个元素的个数和长度 开辟的内存是经过初始化的。
  4. realloc的作用是改变一个已经开辟的空间大小。
pf2 = realloc(100, pf2);

切记 : 用完就扔 用前必看

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值