Android 开发环境从零搭建与首跑指南
2026/10/3 17:45:21
//malloc()函数申请空间(括号里放大于0的字节数)//向堆区申请空间(堆区位于栈区下面,静态区上面)//void* malloc(size_t int )//当malloc()申请内存空间失败时会返回NULL指针(空指针)#include<stdio.h>#include<stdlib.h>intmain(){//int arr[10];int*p=(int*)malloc(10*sizeof(int));if(p==NULL){printf("申请失败\n");return1;}for(inti=0;i<10;i++){*(p+i)=i+1;}for(intj=0;j<10;j++){printf("%d ",p[j]);printf("%d ",*(p+j));}free(p);//需注意释放内存后,p的地址不会改变,后续仍然可以通过p找到后面的地址// 此时p被称为悬空指针(指曾经有校但目前内存已经被释放或失效了)//因为p指向的地址无法改变p=NULL;//让p指向空指针,保证安全性}//如果没有free释放空间,那么在程序结束后,会自动释放空间// //而free()是在程序结束前主动释放空间,为后续未执行的程序减轻内存压力//free()函数,其作用:释放,之前通过动态内存分配函数申请的空间,strlib头文件// void free(void* p)//p指向要释放的内存首地址//calloc()函数其功能和malloc()相似都是向堆区申请动态内存空间//不同的是,calloc(size_t sum,size_t size)括号里的是元素个数,和单个元素大小// 其功能是为sum个大小为size的元素开辟一个堆区空间,还会将元素初始化为0#include<stdio.h>#include<stdlib.h>intmain(){//int arr[10];//int* p = (int*)malloc(10 * sizeof(int));int*p=(int*)calloc(10,4);if(p==NULL){printf("申请失败\n");return1;}for(intj=0;j<10;j++){printf("%d ",p[j]);printf("%d ",*(p+j));}}//malloc(size_t n)括号里放的是向堆区申请了n个字节//calloc(size_t num,size_t size)括号里放的是向堆区申请num个大小为size的原素//free(p);//需注意释放内存后,p的地址不会改变,后续仍然可以通过p找到后面的地址// 需注意括号里的p必须是首地址// 此时p被称为悬空指针(指曾经有校但目前内存已经被释放或失效了)// //悬空指针不是空指针// //因为p指向的地址无法改变// p = NULL;//让p指向空指针,保证安全性//realloc(void* p,size_t n)将p指向的堆区动态内存地址的大小重新分配成n个字节大小// 如果原地址后面的地址足够容下新加上的地址,则地址不变,// 如果不够则重新在内存寻找一个空间大于等于 n字节的地址重新指向该地址// 需注意如果p是空指针则功能和malloc类似// 如果地址调整失败则返回空指针