ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

动态内存空间的申请与扩展学习

动态内存空间的申请与扩展学习 //malloc()函数申请空间(括号里放大于0的字节数)//向堆区申请空间(堆区位于栈区下面静态区上面)//void* malloc(size_t int )//当malloc()申请内存空间失败时会返回NULL指针空指针#includestdio.h#includestdlib.hintmain(){//int arr[10];int*p(int*)malloc(10*sizeof(int));if(pNULL){printf(申请失败\n);return1;}for(inti0;i10;i){*(pi)i1;}for(intj0;j10;j){printf(%d ,p[j]);printf(%d ,*(pj));}free(p);//需注意释放内存后,p的地址不会改变后续仍然可以通过p找到后面的地址// 此时p被称为悬空指针指曾经有校但目前内存已经被释放或失效了//因为p指向的地址无法改变pNULL;//让p指向空指针保证安全性}//如果没有free释放空间那么在程序结束后会自动释放空间// //而free()是在程序结束前主动释放空间为后续未执行的程序减轻内存压力//free()函数,其作用释放,之前通过动态内存分配函数申请的空间,strlib头文件// void free(void* p)//p指向要释放的内存首地址//calloc()函数其功能和malloc()相似都是向堆区申请动态内存空间//不同的是calloc(size_t sum,size_t size)括号里的是元素个数和单个元素大小// 其功能是为sum个大小为size的元素开辟一个堆区空间,还会将元素初始化为0#includestdio.h#includestdlib.hintmain(){//int arr[10];//int* p (int*)malloc(10 * sizeof(int));int*p(int*)calloc(10,4);if(pNULL){printf(申请失败\n);return1;}for(intj0;j10;j){printf(%d ,p[j]);printf(%d ,*(pj));}}//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类似// 如果地址调整失败则返回空指针
返回列表