C语言复习8:动态内存分配
- 游戏开发
- 2025-09-18 20:00:01

## 动态内存分配 - malloc: 申请空间(连续) 掌握 void malloc(count); - ralloc: 申请空间 + 数据初始化 了解 void ralloc(count,size); - realloc: 修改空间大小(注意是开辟的新/原先的空间) void realloc(void * 指针变量,修改之后的大小size); - free: 释放空间 - 细节说明: 1. malloc()函数创建的空间的单位是字节 2. malloc()函数返回的是void类型的指针,没有步长的概念,也无法获取空间中的数据,需要强转 3. malloc()函数返回的仅仅是首地址,没有总大小,最好定义一个变量记录总大小 4. malloc()函数申请的空间不会自动消失,如果不能正确释放,会导致内存泄露 5. malloc()函数申请的空间过多,会产生虚拟内存 6. malloc()函数申请的空间没有初始化值,需要先赋值才能使用 7. free()函数释放完空间后,空间中的数据叫做脏数据,可能被清空,可能被修改为其他值 8. colloc()函数就是在malloc的基础上多了一个初始化的动作 9. realloc()函数修改之后的空间,地址值有可能发生变化,也有可能不会改变,但是原先的数据不会 10. realloc()函数修改之后,无需释放原来的空间,函数底层会进行处理
#include<stdio.h> #include<stdlib.h> void method(int* p,int size); int main() { /* 1.利用malloc函数申请一片连续的空间 需求:申请一片空间,要存储10个int类型的整数,返回这片空间的首地址 */ int* p = (int * )malloc(10 * sizeof(int));//malloc()函数返回值类型是void,所以要进行强制转换 // int* p = (int * )malloc(10 , sizeof(int)); int size = 10; //2.赋值 for (int i = 0; i < size; i++) { //第一种赋值方式: *(p + i) = (i + 1) * 10; //第二种赋值方式: //p[i] = (i + 1) * 10; } //3.遍历 for (int i = 0; i < size; i++) { printf("%d\n",*(p + i)); } //或调用函数:method(p,size); //4.扩容,20个int类型的整数 int* pp = (int * )realloc(p, 20 * sizeof(int));//该函数除了扩容外,还将原先的数据进行了拷贝 //5.释放空间 free(pp); return 0; } void method(int* p,int size){ for (int i = 0; i < size; i++) { printf("%d\n",*(p + i)); } printf("\n"); }## c语言的内存结构 - 栈 :程序运行的区域,变量,数组 - 堆 :malloc()函数开辟的空间在堆里 - 初始化静态区:static全局变量已初始化 - 未初始化静态区:static全局变量未初始化 - 常量区:用指针类型定义的字符串,例如:char * arr[50] = "dargagfad"; - 代码运行区:运行时代码加载到这里
C语言复习8:动态内存分配由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“C语言复习8:动态内存分配”
下一篇
类和对象进一步了解c++