- 论坛徽章:
- 0
|
这个是我刚写的程序, 在释放内存的时候遇到了问题 请帮忙分析下问题出在那里,以及如何解决。
==============================================================================
#include<stdio.h>
#include<malloc.h>
#define TYPE int
//栈节点
typedef struct Tag_Node
{
TYPE data; //栈节点的数据
struct Tag_Node * prenode; //前一个栈节点
}Node, *pNode;
//栈
typedef struct Tag_Stack
{
pNode base; //栈底
pNode top; //栈顶
int top_num; //栈的大小
}Stack, *pStack;
//初始化栈
pStack initStack()
{
pStack temp;
temp = (pStack)malloc(sizeof(pStack));
temp->top_num = -1;
temp->top = NULL;
temp->base = NULL;
return temp;
}
//初始化栈节点
pNode initNode()
{
pNode temp;
temp=(pNode)malloc(sizeof(pNode));
return temp;
}
//释放栈节点
void freeNode( pNode node)
{
free(node);
}
//入栈
void Push(pStack s, TYPE element)
{
pNode node;
node = initNode();
//记录上个节点的位置 (位置a)
node->prenode = s->top;
s->top_num ++;
s->top = node;
s->top ->data = element;
s->top->prenode = node->prenode; //记录原节点的位置 对应到位置a
}
//获得栈顶元素
//出栈
void Pop(pStack s)
{
pNode tempNode;
if(s->top_num <= -1)
{
printf("stack empty.\n");
return;
}
else
{
tempNode = s->top;
s->top_num --;
s->top = s->top->prenode;
freeNode(tempNode);
}
}
//打印栈
void printStack(pStack s)
{
//pStack temp;
pNode temp;
temp = (pNode)malloc(sizeof(pNode));
temp = s->top; //保存s->top的位置
//printf("printstack = %d\n", temp);
if(s->top_num <= -1)
{
printf("stack empty.\n");
return ;
}
while(s->top != NULL)
{
printf("node data is : %d\n", s->top->data);
s->top = s->top->prenode;//向回指一个节点位置
}
s->top = temp;
//printf("s->top=%d\n",s->top);
}
int main()
{
Stack *stack;
TYPE *temp;
temp = NULL;
stack = initStack();
Push(stack, 5);
Push(stack, 4);
//printStack(stack);
Pop(stack);
//printStack(stack);
return 0;
} |
|