内部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されたため)、それが後でクラッシュする理由です。
PS:C ++を使用しているので、代わりnew
に(およびのdelete
代わりにfree()
)を使用することを検討してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加