我试图释放分配阵列的存储内struct _Stack
,但该计划一直如何释放一个动态分配的内存到一个struct中的数组?
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'](http://en.cppreference.com/w/cpp/memory/unique_ptr),你应该使用'new []'和'delete []'而不是'malloc'和'free'。但是,如果指针不是必需的,那么你应该使用['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)。 –
向我们展示导致此问题并可以运行的完整代码(MCVE)。另外,不要在名称中使用下划线(保留)。 – lorro
我也建议你花些时间阅读[有关在C++标识符中使用下划线的规则?](http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-下划线在ac标识符)以下划线后跟大写字母(如'_Stack')开头的符号被保留。 –