赞
踩
目录
- int val = 20;//在栈空间上开辟四个字节
- char arr[10] = {0};//在栈空间上开辟10个字节的连续空间
void* malloc (size_t size);
void free (void* ptr);
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int num = 0;
- scanf("%d", &num);
- int arr[num] = {0};
- int* ptr = NULL;
- ptr = (int*)malloc(num*sizeof(int));
- if(NULL != ptr)//判断ptr指针是否为空
- {
- int i = 0;
- for(i=0; i<num; i++)
- {
- *(ptr+i) = 0;
- }
- }
- free(ptr);//释放ptr所指向的动态内存
- ptr = NULL;//是否有必要?
- return 0;
- }
void* calloc (size_t num, size_t size);
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int *p = (int*)calloc(10, sizeof(int));
- if(NULL != p)
- {
- int i = 0;
- for(i=0; i<10; i++)
- {
- printf("%d ", *(p+i));
- }
- }
- free(p);
- p = NULL;
- return 0;
- }
输出结果:
0 0 0 0 0 0 0 0 0 0
void* realloc (void* ptr, size_t size);
realloc调整空间失败,会返回NULL
realloc在调整内存空间成功的是存在两种情况:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- //空间不够,想要扩大空间
- int *ptr = (int*)malloc(100);
- if(ptr != NULL)
- {
- //业务处理
- }
- else
- {
- return 1;
- }
- //扩展容量
-
- //代码1 - 直接将realloc的返回值放到ptr中
- ptr = (int*)realloc(ptr, 1000);//这样可以吗?(如果申请失败会如何?)
-
- //代码2 - 先将realloc函数的返回值放在p中,不为NULL,在放ptr中
- int*p = NULL;
- p = realloc(ptr, 1000);
- if(p != NULL)
- {
- ptr = p;
- }
- //业务处理 释放空间
- free(ptr);
- return 0;
- }
realloc函数除了能够调整空间之外,还能实现和malloc一样的功能
- void test()
- {
- int *p = (int *)malloc(INT_MAX/4);
- *p = 20;//如果p的值是NULL,就会有问题
- free(p);
- }
- void test()
- {
- int i = 0;
- int *p = (int *)malloc(10*sizeof(int));
- if(NULL == p)
- {
- exit(EXIT_FAILURE);
- }
- for(i=0; i<=10; i++)
- {
- *(p+i) = i;//当i是10的时候越界访问
- }
- free(p);
- }
- void test()
- {
- int a = 10;
- int *p = &a; //p指向的空间不再是堆区上的空间
- free(p);//ok?
- }
- void test()
- {
- int *p = (int *)malloc(100);
- p++;
- free(p);//p不再指向动态内存的起始位置
- }
- void test()
- {
- int *p = (int *)malloc(100);
- free(p);
- free(p);//重复释放
- }
- void test()
- {
- int *p = (int *)malloc(100);
- if(NULL != p)
- {
- *p = 20;
- }
- }
-
- int main()
- {
- test();
- while(1);
- }
忘记释放不再使用的动态开辟的空间会造成内存泄漏。 切记:动态开辟的空间⼀定要释放,并且正确释放。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。