C中结构中指针指向的自由数组
我在动态数组中实现了一个堆栈。下面是我的一些功能。当我调用stk_reset函数时,堆栈似乎没有完全释放 这是我的结构。我需要在struct中有一个指向动态数组的指针C中结构中指针指向的自由数组,c,arrays,pointers,memory-management,struct,C,Arrays,Pointers,Memory Management,Struct,我在动态数组中实现了一个堆栈。下面是我的一些功能。当我调用stk_reset函数时,堆栈似乎没有完全释放 这是我的结构。我需要在struct中有一个指向动态数组的指针 typedef struct stack { char *items; int arrSize; int top; } StackStruct; void stack_create(StackStruct *s) { char *arr =
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;
}
void stk_重置(StackStruct*s){
int i;
对于(i=0;i=1;i++)
免费((s->items)+);
免费->项目;
s->items=NULL;
s->top=-1;
s->arrSize=0;
}
您只能在malloc
返回给您的指针上调用free
,并且只能释放整个块,而不能释放单个字节。您希望每次调用malloc
时调用free
。在这里,您只分配了一个项目,可容纳两个字符。要想免费它,这很简单。这就是所谓的“安全”释放(或免费)
尽管要使用它,您需要确保在尝试使用它之前将值初始化为NULL:s->items=NULL代码>
不需要其他的free
调用,当您只有一个malloc
时,当然也不需要在循环中调用。您应该了解malloc
和free
做什么,在一个简单的示例中练习使用它们,然后重新审视您的设计。free()
不是这样工作的。
if (s->items != NULL) {
free(s->items);
s->items = NULL; // Reset to be safe.
}