动态内存分配所需要用到的函数-三个开辟函数,一个释放函数(来自cplusplus里面的使用)
这四个函数都是在堆上进行动态内存开辟的
三个动态开辟的函数返回值都是指针类型,但是不知道用户所需要的类型,因此在前面需要进行强制类型转换为自己实际需要的参数类型,本文以int类型进行说明。
1、malloc函数和free函数的使用
malloc函数的返回值为一个指针类型,会有开辟内存空间失败的情况,则在使用前需要进行检查,参数类型为开辟空间的字节数。
free函数的参数为前面开辟空间的地址
使用完空间,在释放的时候,最后加上把刚刚开辟的空间地址置为空指针,防止野指针的使用
这里附上完整代码
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int main()
{
int* p = (int*)malloc(40);
//对开辟的空间进行判空 *** 作
if (p == NULL)
{
return 1;
}
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = i;
}
for (i = 0; i < 10; i++)
{
printf("%d\n", *(p+i));
}
free(p);
p = NULL;//避免使用野指针
return 0;
}
2、calloc函数和free函数的使用
calloc函数的返回值也是指针,第一个参数为开辟的空间数,第二个参数是每个内存块需要的字节个数,这里calloc函数的优点是对开辟的空间进行初始化
下面附上完整的代码使用
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int main()
{
int* p = (int*)calloc(10, sizeof(int));//参数类型意义
if (p == NULL)//同样进行判空 *** 作
{
return 1;
}
int i = 0;
for (i = 0; i < 10; i++)
{
*(p + i) = i;
}
for (i = 0; i < 10; i++)
{
printf("%d\n", *(p + i));
}
free(p);
p = NULL;
return 0;
}
3、realloc函数和free函数的使用
realloc函数主要是对之前开辟的空间进行增加,第一个参数类型为之前开辟空间的基地址,第二个参数类型是需要增加至多大的空间,realloc函数会自动进行内存空间的寻找
完整代码如下
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
int main()
{
int i = 0;
int* p = (int*)calloc(10, sizeof(int));
if (p == NULL)
{
return 1;
}
for (i = 0; i < 10; i++)
{
*(p + i) = i;
}
for (i = 0; i < 10; i++)
{
printf("%d\n", *(p + i));
}
int* pa = (int*)realloc(p, 80);
if (pa== NULL)
{
return 1;
}
p = pa;
for (i = 0; i < 20; i++)
{
*(p + i) = i;
}
for (i = 0; i < 20; i++)
{
printf("%d\n", *(p + i));
}
free(p);
p = NULL;
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)