gpt4 book ai didi

c - 重新分配参数

转载 作者:行者123 更新时间:2023-12-02 09:32:00 27 4
gpt4 key购买 nike

我正在使用以下代码的数组来实现堆栈

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct Stack{
int top;
int capacity;
int *array;
};

struct Stack *createStack()
{
struct Stack *stack=malloc(sizeof(struct Stack));
stack->top=-1;
stack->capacity=1;
stack->array=malloc(sizeof(sizeof(int)*stack->capacity));
}
void doubleStack(struct Stack *stack)
{
stack->capacity=stack->capacity*2;
stack->array=realloc(stack,stack->capacity);
}
void push( struct Stack *stack , int data)
{
if(stack->top==(stack->capacity)-1)
doubleStack(stack);
stack->array[++stack->top]=data;
}

我的疑问是,当堆栈已满时调用 doubleStack 时,我应该使用 stack->array 作为 realloc() 的第一个参数还是 stack 作为 realloc( )

嗯,我认为应该传递stack->array。因为我们只需要重新分配那部分内存。

但是我不小心通过了stack,这似乎也有效。请指教。

最佳答案

您应该向 realloc 传递一个指向您希望扩展的数组的指针。由于 stack 不是您希望扩展的数组,而 stack->array 是,因此您应该将 stack->array 作为第一个传递参数。

但是,您应该将 realloc 的结果存储在单独的变量中,并执行 NULL 检查。

If the function fails to allocate the requested block of memory, a null pointer is returned, and the memory block pointed to by argument ptr is not deallocated (it is still valid, and with its contents unchanged).

否则您将面临内存泄漏的风险:

int *tmp = realloc(stack->array, stack->capacity);
if (tmp) {
stack->array = tmp;
} else {
... // Deal with the allocation error here
}

关于c - 重新分配参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32095311/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com