赞
踩
提示:以下是本篇文章正文内容,下面案例可供参考
动态内存是相对静态内存而言的。所谓动态和静态就是指内存的分配方式。动态内存是指在堆上分配的内存,
而静态内存是指在栈上分配的内存。
我们已经掌握的内存开辟方式有:
int val = 20;//在栈空间上开辟四个字节
char arr[10] = {0};//在栈空间上开辟10个字节的连续空间
上面第一行代码是在栈空间上开辟四个字节,第二行代码是在栈空间上开辟10个字节的连续空间
但是上述的开辟空间的方式有两个特点:
1. 空间开辟大小是固定的。
2. 数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。
但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在程序运行的时候才能知道,那数组的编译时开辟空间的方式就不能满足了。也就是说当我们指定了数组的空间大小,在以后使用中如果需要进行扩容或者缩小是不能进行操作的,这时我们就需要动态存开辟.
我们先来看一下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; }
经过调试,我们确实发现malloc向内存申请了空间,并进行了初始化
其实当我们在向内存申请了空间并使用后,我们需要释放空间,接下来我们就介绍一下free这个函数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。