作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试释放 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);
}
最佳答案
改变这个:
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/
我是一名优秀的程序员,十分优秀!