目录:
1.malloc
2.realloc
3.free
一、malloc
malloc:在堆区分配一块指定大小的内存空间,用来存放数据。这块内存空间在函数执行完成后不会被初始化,它们的值是未知的。
#include <stdio.h>
#include<stdlib.h>
int main(int argc, const char * argv[]) {
char *p;
p=(char*)malloc(5*sizeof(char));
p="love";
printf("%s\n",p);
}
注意
1.malloc分配的空间,默认是void,一定要强制转化成你需要的类型
2.malloc分配的空间在堆上,堆上的东西会保存很久。
3.需要<stdlib.h>头文件
4.最好利用if看是否真的有内存可以分配
二、free
因为malloc分配的空间在堆上,如果成千上万的数据都堆积在那里,就会导致存储器泄漏。所以每次用malloc或realloc分配好空间以后,我们都应该寻找合适时机用free()函数释放它。
#include <stdio.h>
#include<stdlib.h>
int main(int argc, const char * argv[]) {
struct food{
char* name;
int quantity;
};
struct food* p;
p=(struct food*)malloc(sizeof(struct food));
if(p==NULL){
printf("Error - fail to allocate required memory ");
}else{
p->name="ice cream";
printf("%s",p->name);
free(p);
}
return 0;
}
三、realloc
调用函数 realloc() 可以·增加或减少已分配的内存块的大小
#include <stdio.h>
#include <stdlib.h>
int main(){
char *name ;
name = (char *)malloc(10*sizeof(char));
if(name == NULL){
exit(EXIT_FAILURE);
}
scanf("%s", name);
printf("%s\n",name);
name = (char *)realloc(name, 20*sizeof(char));
if(name == NULL){
free(name);
exit(EXIT_FAILURE);
}
free(name);
return 0;
}
当第二次分配内存失败时,记得要释放第一次的内存