1.内存管理:
1.malloc
void *malloc(size_t size);
功能:
申请堆区空间
参数:
size:申请堆区空间的大小
返回值:
返回获得的空间的首地址
失败返回NULL
2.free
void free(void *ptr);
功能:
释放堆区空间
注意:
1.free只能释放堆区空间
2.一个空间只能被free一次,多次free程序会崩溃
3.malloc需要和free搭配使用,如果只有malloc没有free会内存泄露
练习:要求申请堆区空间,将"hello world"存放到堆区空间,完成打印
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*
int main()
{
int *p = NULL;
p = malloc(4);
if (NULL ==p)
{
printf("malloc failed\n");
return 0;
}
*p = 100;
printf("*p = %d\n",*p);
free(p);
return 0;
}
int main()
{
char *p = NULL;
p = malloc(32);
strcpy(p,"hello world");
printf("*p=%s\n",p);
free(p);
return 0;
}
*/
char *FUN()
{
char *str = NULL;
str = malloc(32);
strcpy(str,"hello world");
return str;
}
int main()
{
char *ret = NULL;
ret = FUN();
printf("%s\n",ret);
free(ret);
return 0;
}
2.内存溢出:
内存溢出也称为内存越界
3.内存泄露:
程序中malloc的空间没有被释放
4.内存碎片:
由于频繁申请和释放,导致连续的空间分散成一些小的碎片空间,当malloc超过碎片空间时,则无法获得该空间(空间不连续),将这样的空间称为内存碎片