gpt4 book ai didi

c++ - 如何将动态分配的内存释放到结构内的数组?

转载 作者:太空狗 更新时间:2023-10-29 20:34:44 28 4
gpt4 key购买 nike

我正在尝试释放 struct _Stack 中已分配数组的内存,但程序一直崩溃

typedef struct _Stack
{
int top;
unsigned int capacity;
int* arr;
}_Stack;

_Stack* createStack(int capacity)
{
_Stack* stack = (_Stack*) malloc(sizeof(_Stack));
stack->capacity = capacity;
stack->top = -1;
stack->arr = (int*) malloc(sizeof(stack->capacity * sizeof(int)));
return stack;
}

我正在使用这个函数来释放内存,但是程序在这里崩溃了。

// I have a problem here.
void stack_free(_Stack* stack)
{
free(stack->arr);
free(stack);
}

Here's the error message

最佳答案

改变这个:

stack->arr = (int*) malloc(sizeof(stack->capacity * sizeof(int)));

为此:

stack->arr = (int*) malloc(stack->capacity * sizeof(int));

因为您希望数组的大小等于 stack->capacity * sizeof(int),而不等于该表达式的大小。

您的程序一定在问题中未显示的代码中的某处调用了未定义行为(因为错误的 malloc'ed 大小),这就是它后来崩溃的原因。


PS:由于您使用 C++,请考虑使用 new(和 delete,而不是 free())。

关于c++ - 如何将动态分配的内存释放到结构内的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46681002/

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