我試圖釋放分配陣列的存儲內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')開頭的符號被保留。 –