c语言 动态内存规划

Posted 万物皆为二叉树

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

切记 : 用完就扔 用前必看

以上是关于c语言 动态内存规划的主要内容,如果未能解决你的问题,请参考以下文章

C语言静态内存开辟₀动态内存开辟¹栈堆。

浅谈C语言的动态内存开辟

用C语言分配开辟内存问题

C++ 动态内存开辟

C++ 动态内存开辟

C语言学习笔记(16)动态内存管理