malloc函数:
(本文中介绍的所有函数的头文件都相同)
malloc的用处:malloc常被用来在堆区临时开辟一段动态内存,存储变量,这样可以极大的节省空间,用时可以避免因使用的数据较多而导致的栈溢出。
使用注意事项:
如果开辟成功,则返回一个指向开辟好空间的指针。
如果开辟失败,则返回一个NULL指针,因此malloc的返回值一定要做检查。
返回值的类型是 void* ,所以malloc函数并不知道开辟空间的类型,具体在使用的时候使用者自己 来决定。
如果参数 size 为0,malloc的行为是标准是未定义的,取决于编译器
free函数:
free函数是专门用来清空动态内存中的数据的经常和calloc、malloc、realloc一起使用虽然在程序运行结束后系统就会自动清空动态内存中的数据,但是当你创建的程序较大时,如果不及时释放动态内存,那么就会极大的影响程序的运行效率。
如何正确使用malloc函数?
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
int* p = (int*)malloc(40);
if (p != NULL)
{
for (i = 0; i < 10; i++)
{
*(p+i) = i;
}
for (i = 0; i < 10; i++)
{
printf("%d\n", *(p + i));
}
}
free(p);//注意free的对象只能是接收开辟动态内存首地址的指针变量,且该变量的地址不能发生任何改变。(此处free的对象只能是p,并且p的地址不能发生任何改变)
return 0;
}
calloc函数:
calloc函数和mallo都是用来开辟动态内存的,用malloc只分配空间不初始化,也就是依然保留着这段内存里的数据,通过calloc函数开辟的动态内存会被自动初始化为0.但是通过calloc开辟内存需要的时间会比通过malloc开辟动态内存需要的时间多。因为calloc的使用和malloc基本相同这里就不写了。
relloc函数:
注释:size_t代表的是扩大后的动态内存空间大小。
relloc被用来扩充通过malloc和calloc开辟的动态内存空间。
ptr 是要调整的内存地址 ,size 调整之后新大小
返回值为调整之后的内存起始位置。
这个函数调整原内存空间大小的基础上,还会将原来内存中的数据拷贝到 新 的空间。(原有空间数据保持不变)
realloc在调整内存空间时存在两种情况:当realloc在他们后面可以找到足够大的内存时,就在后面加一段内存,原有数据保持不变。如果不能找到就重新开辟一段,然后将原内存中的数据移到新内存中。
如何使用:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i = 0;
int* p = (int*)malloc(40);
if (p == NULL)
{
printf("malloc: ");
perror((const char*)p);
}
else
{
p=(int*)realloc(p,80);
if (p == NULL)
{
printf("realloc: ");
perror((const char*)p);
}
else
{
for (i = 0; i < 20; i++)
{
*(p + i) = i;
}
}
}
for (i = 0; i < 20; i++)
{
printf("%d\n", *(p + i));
}
free(p);
return 0;
}
喜欢的观众可以三连吗?拜托拜托!