当前位置:   article > 正文

【动态内存分配】_循环里有 malloc

循环里有 malloc

提示:以下是本篇文章正文内容,下面案例可供参考

一、为什么存在动态内存分配

动态内存是相对静态内存而言的。所谓动态和静态就是指内存的分配方式。动态内存是指在堆上分配的内存,而静态内存是指在栈上分配的内存。
我们已经掌握的内存开辟方式有:

int val = 20;//在栈空间上开辟四个字节
char arr[10] = {0};//在栈空间上开辟10个字节的连续空间
  • 1
  • 2

上面第一行代码是在栈空间上开辟四个字节,第二行代码是在栈空间上开辟10个字节的连续空间
但是上述的开辟空间的方式有两个特点:
1. 空间开辟大小是固定的。
2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。
但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。也就是说当我们指定了数组的空间大小,在以后使用中如果需要进行扩容或者缩小是不能进行操作的,这时我们就需要动态存开辟.

二、动态内存函数的介绍

1.malloc

我们先来看一下malloc函数:
在这里插入图片描述
这里要注意如果参数size为0,则malloc的行为是标准未定义的,取决于编译器
下面的例子来具体看一下malloc函数:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	//int arr1[10];//40个字节
	//char arr2[40];//40个字节
	//申请空间
	int* p = (int*)malloc(40);//向内存申请10个整型的大小
	if (p == NULL)
	{
		perror("malloc");//如果错误,打印错误内容
		return 1;
	}
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		*p = i;
		p++;
	}
	return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
'
运行

经过调试,我们确实发现malloc向内存申请了空间,并进行了初始化
在这里插入图片描述
其实当我们在向内存申请了空间并使用后,我们需要释放空间接下来我们就介绍一下free这个函数

2.free

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/969265
推荐阅读
相关标签