如果您为结构堆栈分配内存,则 free() 应该仅用于结构。不是为了它的成员。这是一个为整个结构分配内存的示例程序。free() 应该用于结构指针 s。
如果free (s->elems);
未注释且free (s);
已注释,则 printf 打印分配的数据。struct 的内存不会被释放并导致内存泄漏。
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int allocatedLength;
int logicalLength;
int elementSize;
void *elems;
} stack;
void dispose (stack *s) {
//free (s->elems);
free (s);
}
int main()
{
stack *p = malloc(sizeof(stack));
if(p == NULL)
{
printf("\n Memory Allocation Error\n");
return 0;
}
p->allocatedLength = 10;
p->logicalLength = 20;
p->elementSize = 30;
dispose(p);
/* This printf is undefined behaviour if stack's ptr is freed. If the elem only freed, then it prints data */
printf("\n allocatedLength: %d\nlogicalLength:%d\nelementSize:%d", p->allocatedLength, p->logicalLength, p->elementSize);
return 0;
}