数据结构 学习笔记之:关于顺序栈中给结构体类型指针分配内存时,使用malloc和不使用malloc的疑惑之解惑!

来源:互联网 发布:java连接ssh上传文件 编辑:程序博客网 时间:2024/05/17 05:04
////////////////////////////////////////////////////////////////////////////////
更多原创“uC/OS-II学习笔记之:系列”基础及嵌入式相关知识详解,请访问可乐虎博客:
http://blog.csdn.net/dcx1205
相信不会让您失望!!////////////////////////////////////////////////////////////////////////////////
<span style="font-size:24px;">//顺序栈的C语言实现//大家请看最后用两种方式实现的main函数#include <stdio.h>#include <math.h>#include <stdlib.h> #define TRUE  1#define FALSE 0#define STACK_SIZE 5typedef int ElementType; //定义结构体typedef struct SeqStack {    ElementType array[STACK_SIZE];    ElementType top;}SEQSTACK; //……与问题无关的函数代码均已省略……//情况1int main(void){    SEQSTACK *pS;//定义一个指向结构体变量的指针    pS = (SEQSTACK *)malloc(sizeof(SEQSTACK));    if (pS == NULL)    {        return FALSE;    }    InitStack(pS);//初始化    PushStack(pS, 1);//压栈    PushStack(pS, 2);    PushStack(pS, 3);    PushStack(pS, 4);    PushStack(pS, 5);    TraStack(pS);//遍历栈    free(pS);//释放pS所占内存空间    return 0;}/*//情况2int main(void){    SEQSTACK STK;//定义一个结构体类型的变量    SEQSTACK *pS;//定义一个指向结构体变量的指针    pS = &STK;//将结构体变量的地址赋给指针    //下面函数的参数使用pS和&STK是等效的    InitStack(pS);//初始化      PushStack(&STK, 1);//压栈    PushStack(pS, 2);    PushStack(&STK, 3);    PushStack(pS, 4);    PushStack(&STK, 5);    TraStack(pS);//遍历栈    return 0;}*/请问情况1和2有什么区别啊?是情况1好还是2好?为什么呢?注:情况1和2的运行结果是一样的。解答:
情况1是内存在堆中分配,属动态分配,用完需要手动释放,会产生内存碎片。 情况2是内存在栈中分配,属静态分配,用完会自动释放,不会产生内存碎片。