Я пытаюсь написать программу для проверки сбалансированных круглых скобок, но когда я пытаюсь инициализировать стек/массив, я получаю плохой доступ (код = 1, адрес 0x0).EXC_BAD_ACCESS в реализации стека
Вот код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
#define MAX_STRING_LEN 1000
#define MAX_STACK_SIZE 5000
typedef char StackElement;
typedef struct Stack{
StackElement *content;
int maxSize;
int top;
}Stack;
void Init(Stack*stack);
void Destroy(Stack*stack);
void Push(Stack*stack, StackElement element);
StackElement Pop(Stack*stack);
int IsEmpty(Stack*stack);
int IsFull(Stack*stack);
/*
* A new stack variable is initialized. The initialized
* stack is made empty. MaxSize is used to determine the
* maximum number of character that can be held in the
* stack.
*/
void Init(Stack *stack)
{
StackElement *newContent;
/* Allocate a new array to hold the content.*/
newContent = (StackElement*)malloc(sizeof(StackElement)* MAX_STACK_SIZE);
if (newContent == NULL) {
printf("Insufficient memory to initialize stack.\n");
exit(1);/* Exit, returning error code.*/
}
stack->content = newContent;
stack->maxSize = MAX_STACK_SIZE;
stack->top = -1;
}
int CheckBalancedParentheses (char* expression){
int i = 0;
Stack *stack;
Init(stack);
if (strcmp(&expression[i], ")") == 0 || strcmp(&expression[i], "]") == 0 || strcmp(&expression[i], "}") == 0){
return FALSE;
}
for (i = 0; i < strlen(expression); i++){
if (strcmp(&expression[i], "(") == 0 || strcmp(&expression[i], "[") == 0 || strcmp(&expression[i], "{") == 0){
Push(stack, expression[i]);
}
}
return TRUE;
}
Плохой доступ происходит на всех этих линий (я проверил их по отдельности):
stack->content = newContent;
stack->maxSize = MAX_STACK_SIZE;
stack->top = -1;
Я не могу понять, почему это дает мне плохой доступ, любая помощь/совет будут оценены!
Благодарим вас за продвижение.
'Пакетирование> content':' stack' является NULL. – BLUEPIXY
@BLUEPIXY 'stack' _uninitialized_. – AlexD
@ AlexD Неподтвержден. – BLUEPIXY