我正在研究一个真正简单的堆栈实现,我似乎无法弄清楚为什么我有内存泄漏.我对代码的期望是在push()中分配了5个节点,在displayAndDestroy()中释放了5个节点.但是Valgrind说我已经分配了6个节点的数据并且只释放了5个.我一直在盯着这个,我不确定我哪里出错了.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct STACK{
char data[100];
struct STACK *next;
} stack;
stack *push( stack *oldTop, char *data )
{
stack *newTop = malloc(sizeof(stack));
newTop->next = oldTop;
if(!data){
strcpy(newTop->data, newTop->next->data);
} else{
strcpy(newTop->data, data);
}
return( newTop );
}
void displayAndDestroy( stack *top )
{
stack *currentTop = top;
stack *temp;
int i=0;
while(currentTop){
printf("stack%d: %s\n", i, currentTop->data );
temp = currentTop->next;
free(currentTop);
currentTop = temp;
i++;
}
}
stack *initializer( stack *top, char *fileName …Run Code Online (Sandbox Code Playgroud)