主页 > 游戏开发  > 

C语言复习8:动态内存分配

C语言复习8:动态内存分配

## 动态内存分配         -  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:动态内存分配