У меня есть стек, реализованный с динамически распределенным массивом, который заполняется с помощью scanf(). Функция push работает правильно, за исключением того, что когда я распечатываю стек, я всегда получаю два дополнительных нуля в начале вывода. Попытка выставить стек только выдает нули, и он segfaults, как только popping произойдет дважды. Я не могу понять, где эта проблема.Стек с динамическим массивом: segfaults при появлении значения несколько раз
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*Creates struct of stack*/
typedef struct Stack{
int *ptArray;
int top;
int stackSize;
int itemsInStack;
} Stack;
/*Initialized stack*/
Stack* stackInit(){
Stack *a;
a= (Stack*) malloc(sizeof(Stack));
a-> ptArray=(int*) malloc(sizeof(int)) ;
a-> top=0;
a-> stackSize=1;
return a;
}
void stackPush( Stack *stx, int val){
if((stx->top) == (stx->stackSize)){
grow(&stx->ptArray, &stx->stackSize);
}
stx->ptArray[stx->top]= val;
stx->top++;
stx->itemsInStack++;
}
/*Grows astack array when space runs out*/
void grow(int** array, int *sz){
int *temp;
temp= (int*) malloc(sizeof(int)* (*sz+2));
int i;
for(i=0; i< *sz; i++)
temp[i]=(*array)[i];
free(*array);
*array= temp;
*sz=*sz+2;
}
void stackPop(Stack* stx){
free(stx->ptArray[stx->top]);
stx->top--;
stx->stackSize--;
stx->itemsInStack--;
}
void showStack(Stack* s){
int i;
printf("\n");
for(i=s->stackSize; i>-1; i--){
printf("%d\n", s->ptArray[i]);
}
}
void main(int argc, char** argv){
Stack *stackArray;
stackArray= stackInit();
int val=0;
while (val != -999) {
scanf("%d", &val);
if (val == -999) {
break;
}
stackPush(stackArray, val);
}
showStack(stackArray);
stackPop(stackArray);
stackPop(stackArray);
showStack(stackArray);
stackPop(stackArray);
showStack(stackArray);
}
См. [Ask]. Используйте отладчик, чтобы получить конкретную проблему. – Olaf
'int * temp;' 'temp = (char *) malloc (sizeof (char) * (* sz + 2));' почему вы отбрасываете его на char *? – tesseract
Это была ошибка, это должно быть int – Alcore