[英]Free array pointed to by a pointer within a struct in C
我有一个在动态数组中实现的堆栈。 以下是我的一些功能。 当我调用stk_reset函数时,似乎没有完全释放堆栈。
这是我的结构。 我必须在结构内部有一个指向动态数组的指针
typedef struct stack {
char *items;
int arrSize;
int top;
} StackStruct;
void stack_create(StackStruct *s) {
char *arr = malloc(sizeof(char)*2);
if (arr == NULL) {
printf("Insufficient memory to initialize stack.\n");
return;
}
s->arrSize = 2;
s->items = arr;
s->top = -1;
}
我如何释放分配堆栈的数组的每个元素? 我将此语句free((s-> items)++)与for循环一起使用,但没有用。
void stk_reset(StackStruct *s) {
int i;
for (i = 0; i <= s->arrSize; i++)
free((s->items)++);
free(s->items);
s->items = NULL;
s->top = -1;
s->arrSize = 0;
}
您只能在malloc
返回的指针上调用free
,并且只能释放整个块,而不是单个字节。
您希望一(1)个调用free
对malloc
每次调用。 在这里,您只分配了一个有两个字符的空间的项目。 要free
它,这很简单。 这就是所谓的“安全”发布(或免费)。
if (s->items != NULL) {
free(s->items);
s->items = NULL; // Reset to be safe.
}
尽管要使用它,但是在尝试使用它之前,需要确保将值初始化为NULL: s->items = NULL;
。
不需要其他free
调用,并且当您只有一个malloc
时,当然不需要循环调用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.