c语言 动态内存规划

动态内存规划

  • 内存分区以及功能
    • 动态内存分配
    • 动态内存分配函数
      • malloc和 free
    • 总结

内存分区以及功能

内存分配图
c语言 动态内存规划_第1张图片
各区功能特点 以 堆区 栈区 介绍
栈区
c语言 动态内存规划_第2张图片
堆区
c语言 动态内存规划_第3张图片

动态内存分配

戳这里内存分配办法

动态内存分配函数

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
#include


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);

切记 : 用完就扔 用前必看

你可能感兴趣的:(c,c语言)