动态内存分配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态内存分配相关的知识,希望对你有一定的参考价值。
free的用法:
(1)free不能只释放一部分内存,是释放一整块开辟的内存
(2)free不能释放非动态开辟的内存
int a=10;
int*p=&a;
free(p); 错误
(3)free不能释放多次内存
int*ptr1=p;
int*ptr2=p;
free(ptr1);
free(ptr2); 错误
Malloc:
#include<stdio.h> #include<stdlib.h> int main() { int*p = (int*)malloc(10 * sizeof(int)); int i = 0; if (p == NULL) { printf("out of memory\n"); exit(0); } for (i = 0; i < 10; i++) { p[i] = i + 1; } for (i = 0; i < 10; i++) { printf("%d ", p[i]); } printf("\n"); free(p); getchar(); return 0; }
结果:1 2 3 4 5 6 7 8 9 10
封装成函数:
#define MALLOC(count,type)(type *)malloc(count*sizeof(type))//封装 int main() { int*p = MALLOC(10,int);//调用,不用判断p=NULL int i = 0; for (i = 0; i < 10; i++) { p[i] = i+1; } for (i = 0; i < 10; i++) { printf("%d\n", p[i]); } free(p); getchar(); return 0; } Calloc: #include<stdio.h> #include<stdlib.h> int main() { int*p = (int*)calloc(100,sizeof(int)); int i = 0; int*q = NULL; for (i = 0; i < 100; i++) { p[i] = i + 1; } q = realloc(p, 200 * sizeof(int)); for (i = 0; i < 200; i++) { printf("%d ", p[i]); } printf("\n"); free(p); getchar(); return 0; }
例:动态开辟二维数组
#include<stdio.h> #include<stdlib.h> int main() { int(*p)[4] = (int(*)[4])malloc(3 * 4 * sizeof(int)); int i = 0; int j = 0; for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { p[i][j] = i * 4 + j + 1; } } for (i = 0; i < 3; i++) { for (j = 0; j < 4; j++) { printf("%d ", p[i][j]); } printf("\n"); } free(p); getchar(); return 0; }
结果:
1 2 3 4
5 6 7 8
9 10 11 12
以上是关于动态内存分配的主要内容,如果未能解决你的问题,请参考以下文章