Я пытаюсь реализовать структуру данных стека, используя массив.Когда я вызываю функцию push () в первый раз, она работает нормально.Но когда я вызываю его во второй раз, я получаю ошибку сегментации в операторе: - *stack[*tos] = data;
Возможно, причина этого в том, что массив поврежден.Я обнаружил эту причину, когда выполнил функцию pop ().Он изменяет все элементы, кроме того, который высовывается.Я присваиваю '0' вытолкнутому элементу.
Вот весь код:
#include <stdio.h>
#include <stdlib.h>
void push(int data, int *tos, int size, int **stack)
{
(*tos)++;
printf("\ntos = %d\n", *tos);
if (*tos > size)
{
puts("\nStack Overflow!!!\n");
(*tos)--;
return;
}
printf("\ndata = %d\n", data);
*stack[*tos] = data;
printf("\nstack[*tos] = %d\n", *stack[*tos]);
}
void pop(int *tos, int **stack)
{
if ((*tos) == -1)
{
puts("\nStack Underflow!!!\n");
return;
}
stack[*tos] = 0;
(*tos)--;
for (int i = 0; i < 5; i++)
printf("%d\t", stack[i]);
puts("\n");
}
int main()
{
int size = 0, tos = -1;
printf("\nEnter size of stack: ");
scanf("%d", &size);
int *stack = (int *) calloc(size, sizeof(int));
push(9, &tos, size, &stack); push(1, &tos, size, &stack); //push(2, &tos, size, stack); push(3, &tos, size, stack); push(4, &tos, size, stack);
for (int i = 0; i < size; i++)
printf("%d\t", stack[i]);
puts("\n");
pop(&tos, &stack); //pop(&tos, &stack);
/*for (int i = 0; i < size; i++)
printf("%d\t", stack[i]);
puts("\n");*/
return 0;
}