//栈区—局部变量,函数的形式参数
//堆区—动态内存分配 --malloc,free,calloc,realloc。
//静态区-全局变量,静态变量,static
#include<stdlib.h>
#include<stdio.h>
#include<errno.h>
#include<string.h>
//int mian()
//{
//
// int* p = (int*)malloc(10 * sizeof(int));//如果参数size为0,malloc的行为是未定义的,取决于编译器;
// if (p == NULL)
// {
// printf("%s\n", strerror(errno));
// }
// else
// {
// int i = 0;
// for (i = 0; i < 10; i++)
// {
// *(p + i) = i;
// }
// for (i = 0; i < 10; i++)
// {
// printf("%d", *(p + i));
// }
// }
// free(p);//如果p指向的空间不是动态开辟的,则free函数的行为是未定义的。
// p = NULL;
// return 0;
//}
//
//
//int main()
//{
// //动态开辟一个空间,并初始化空间的每个字节为0;
// int* p =(int*)calloc(10,sizeof(int));//前面是元素个数,后面是元素大小;
// return 0;
//}
//realloc--调整动态开辟内存空间的大小;
//使用的注意事项
//1.如果p指向的空间之后有足够的空间可以追加,则直接追加,并返回p;
//2.如果p指向的空间之后没有足够的空间可以追加,则重新开辟一块空间,并将原来内存中的数据
//拷贝过来,释放旧的内存空间,最后返回新开辟的内存空间地址
//3.要用一个新的变量来接受realloc函数的返回值;
//int main()
//{
// int* p = (int*)malloc(20);
// if (p == NULL)
// {
// printf("%s\n", strerror(errno));
// }
// else
// {
// int i = 0;
// for (i = 0; i < 5; i++)
// {
// *(p + i) = i;
// }
// }
// int* p2=(int*)realloc(p, 40);
// if (p2 != NULL)
// {
// p = p2;
// int i = 0;
// for (i = 5; i < 10; i++)
// {
// *(p + i) = i;
// }
// for (i = 0; i < 10; i++)
// {
// printf("%d ", *(p + i));
// }
// }
// free(p);
// p = NULL;
// return 0;
//}
//柔型数组
//struct S
//{
// int n;
// int arr[];
//}s;
//
//int main()
//{
// struct S* p = (struct S*)malloc(sizeof(s) + sizeof(int) * 5);
// int i = 0;
// for (i = 0; i < 5; i++)
// {
// p->arr[i] = i;
// }
// for (i = 0; i < 5; i++)
// {
// printf("%d ", p->arr[i]);
// }
// free(p);
// return 0;
//}
自学记录--动态内存分配
最新推荐文章于 2024-07-23 14:02:12 发布