【发布时间】:2017-10-11 06:14:13
【问题描述】:
我正在尝试释放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);
}
【问题讨论】:
-
如果你用 C++ 编程,那你为什么要使用
malloc和free?如果您必须使用指针作为要求,请首先使用 智能指针,例如std::unique_ptr,您绝对应该使用new[]和delete[]而不是malloc和free。但是,如果不需要指针,那么您应该改用std::vector。 -
向我们展示导致此问题的完整代码并且可以运行 (MCVE)。此外,请勿在名称中使用下划线大写(保留)。
-
我还建议您花点时间阅读What are the rules about using an underscore in a C++ identifier? 以下划线开头后跟大写字母的符号(例如
_Stack)是保留的。 -
您确定每次调用
stack_free都是用createStack创建的指针吗? -
至于您的问题,请尝试创建Minimal, Complete, and Verifiable Example 并告诉我们。也请read about how to ask good questions。最后,请阅读 Eric Lippert 的 How to debug small programs,了解如何使用调试器(包括内存调试器,例如 Valgrind 或类似的)。
标签: c++ arrays struct malloc free