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); // 内存已释放,结果不正确
}

 

 

posted on 2018-04-16 16:02  沙滩海风  阅读(562)  评论(0编辑  收藏  举报

导航