我编写了一个简单的程序来实现基于动态数组的堆栈.realloc
用于调整我用来存储堆栈元素的容器的大小.
#include <stdio.h>
#include <stdlib.h>
void stack_push(int **stack, int *stackSize, int element);
int stack_pop(int **stack, int *stackSize);
int main()
{
char ch;
int *stack = NULL, stackSize = 0;
do
{
printf("\n1. Push\n");
printf("2. Pop\n");
printf("Exit (0)\n");
printf("Enter choice : ");
scanf("%c", &ch);
switch(ch)
{
case '1':
stack_push(&stack, &stackSize, 1);
break;
case '2':
printf("%d\n", stack_pop(&stack, &stackSize));
break;
case '0':
break;
}
} while (ch != '0');
return 0;
}
void stack_push(int **stack, int *stackSize, int element)
{
if (!*stack)
{
*stack = malloc(sizeof(int));
}
else
{
*stack = realloc(*stack, sizeof(int) * (*stackSize + 1));
}
*stack[*stackSize] = element;
*stackSize += 1;
}
int stack_pop(int **stack, int *stackSize)
{
if (!*stack)
{
return -1;
}
else
{
*stackSize -= 1;
int element = *stack[*stackSize];
if (*stackSize > 0)
{
*stack = realloc(*stack, sizeof(int) * (*stackSize));
}
else
{
free(*stack);
*stack = NULL;
}
return element;
}
}
此程序适用于第一个元素.但是,当我try 添加后续元素时,我遇到了分段错误.
我try 调试我的代码,我发现:
线路出现分段故障:
*stack[*stackSize] = element;
以下是显示其他细节的屏幕截图: Segmentation Fault个
我哪里错了?