C语言之栈区、堆区
一 局部变量存放在栈区中,函数调用结束后释放内存空间。
#include "stdio.h"; #include "stdlib.h"; int *getNum(){ int i = 100; return &i; } void main(){ int *i = getNum(); printf("%d\n\r",i); // 内存已释放,结果不正确 }
二 malloc(memory allocate)动态分配的内存在堆区,需要调用free手动释放。
通过malloc申请的内存,才能用free释放。局部变量用free释放,会报错。
#include "stdio.h";
#include "stdlib.h";
char *getColor(){
void *str = malloc(4);
char *color = (char *)str;
*color++ = 'r';
*color++ = 'e';
*color++ = 'd';
*color = '\0'; // 字符串结束标记
return (char *)str;
}
void main(){
char *color = getColor();
printf("%s\n\r",color);
free(color);
printf("%s\n\r",color); // 内存已释放,结果不正确
}