【无标题】动态内存分配
1.malloc函数开辟动态内存存储区 void *malloc(unsigned int size)
①注意指针的类型为void,它只提供一个纯地址
②申请一组连续的空间,即为数组
#include
#include
int main()
{int a = 0;int *p1 = &a;*p1 = 100;printf("%d\n",a);//静态开辟空间int a = 0;int *p2 = (int *)malloc(sizeof(int));//动态开辟
//开辟了两个空间,在堆开辟了四个字节的整形空间(释放空间),一个是栈区开辟了保存p2这个指针变量的空间(不需要手动释放空间,)*p2 = 100;}
①int *p2 = (int *)malloc(sizeof(int));
*p2 = 100;
这样做会造成内存泄漏——动态开辟了内存空间而没有释放(用free函数释放动态存储区)
—— free(p1);释放的是p1指针所指向的空间,p1不会被付空,p1还是指向这个空间(将其称为野指针)
—— p=NULL;//释放指针,预防野指针
2.用calloc函数开辟动态存储空间void *malloc(unsigned n,unsigned size)
作用:是在内存的动态存储区中分配n个长度为size的连续空间,这个空间一般比较大,足以保存一个数组
void main()
{int n = 10;int *p = (int *)calloc(n, sizeof(int));}
p=calloc(50,4); //开辟50×4个字节的临时分配域,把首地址付给指针变量
注意:以上两个都要判断是否为空
if (pa == NULL){printf("Out Of Memory.\n");return;}
3.用realloc函数重新分配动态存储区
realloc(p,50); //将p所指向的已分配的董涛空间改为50字节
void main()
{int n = 10;int *pa = (int*)malloc(sizeof(int)*n);//申请10个整形空间,强转为int类型if (pa == NULL){printf("Out Of Memory.\n");return;}for (int i = 0; i < n; ++i){pa[i] = i + 1;}for (int i = 0; i < n; ++i)printf("%d", pa[i]);printf("\n");n = 10;pa = (int*)realloc(pa, sizeof(int)*n);free(pa);pa = NULL;if (pa == NULL){printf("Out Of Memory.\n");return;}for (int i = 5; i < n; ++i){pa[i] = i + 1;}for (int i = 0; i < n; ++i)printf("%d", pa[i]);printf("\n");}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
