上一次记录了一下所谓的静态内存分配,我们可以看出静态内存分配有很多问题,大部分情况下我们不希望自己所做的工作白费,也就是内存被回收,除了确定了没用,所以我们该如何做呢? C语言提供了动态内存分配,就是自己手动申请内存,但是也需要手动去释放内存。
语法:使用malloc(int)关键字类申请一块内存,参数为要申请内存的大小,单位为byte
#include <stdio.h>
#include<stdlib.h>
void swipe(int** p){
//动态申请一块内存
int *tempPoint = malloc(sizeof(int));
//给这块内存赋值为999
*tempPoint = 999;
//指针p的值赋值为tempPoint中存储的内存地址。
*p = tempPoint;
}
void main(){
int i = 100;
int *p = &i;
swipe(&p);
Sleep(10);
printf("*p的:%d\n",*p);
printf("*p的:%d\n",*p);
printf("*p的:%d\n",*p);
}
程序运行结果:
*p的:999
*p的:999
*p的:999
可以看出来,就算是延迟了也没有问题了。
但是需要手动释放内存:
语法:free(指针变量名);
#include <stdio.h>
#include<stdlib.h>
void swipe(int** p){
//动态申请一块内存
int *tempPoint = malloc(sizeof(int));
//给这块内存赋值为999
*tempPoint = 999;
//指针p的值赋值为tempPoint中存储的内存地址。
*p = tempPoint;
}
void main(){
int i = 100;
int *p = &i;
swipe(&p);
Sleep(10);
printf("*p的:%d\n",*p);
printf("*p的:%d\n",*p);
printf("*p的:%d\n",*p);
//因为这个指针p的值存储的是在swipe方法中动态申请的内存地址,所以释放这个指针变量p中存储的值对应的内存地址,就释放了swipe中开辟的那一块内存地址。
free(p);
printf("*p的:%d\n",*p);
}
运行结果:
*p的:999
*p的:999
*p的:999
*p的:12255568