C语言之栈区、堆区

一 局部变量存放在栈区中,函数调用结束后释放内存空间。

#include "stdio.h";
#include "stdlib.h";

int *getNum(){
    int i = 100;
    return &i;
}

void main(){
    int *i = getNum();
    printf("%d

",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   = ''; // 字符串结束标记
    return (char *)str;
}

void main(){
    char *color = getColor();
    printf("%s

",color);
    free(color);
    printf("%s

",color); // 内存已释放,结果不正确
}

原文地址:https://www.cnblogs.com/sea-breeze/p/8856364.html