#include <stdio.h>
#define MAX_STACK_SIZE 255
#define bool unsigned short int
#define true 1
#define false 0
struct stack{
int *pointer;
int count;
int *topOfStack;
int max;
int theStack[MAX_STACK_SIZE];
};
void initStruct(struct stack *stackStruct){
stackStruct->pointer = stackStruct->theStack;
stackStruct->topOfStack = stackStruct->theStack;
//this line is problematic
stackStruct->max = MAX_STACK_SIZE;
//
stackStruct->count = 0;
}
bool pushStack(struct stack *stackStruct,int inputValue){
if(stackStruct->count < stackStruct->max){
*stackStruct->pointer = inputValue;
stackStruct->pointer++;
stackStruct->count++;
return true;
}else
return false;
}
int* popstack(struct stack *stackStruct){
if(stackStruct->count >0){
stackStruct->pointer--;
stackStruct->count--;
return stackStruct->pointer;
}
return NULL;
}
int main(){
int c =1;
struct stack s[4];
for(int i=0;i<4;i++){
initStruct(&s[i]);
for(int j=0;j<3;j++){
pushStack(&s[i],c);
c++;
}
}
int *popValue;
for(int i=0;i<4;i++){
popValue = popstack(&s[i]);
while(popValue!=NULL){
printf("s[%d]=%d\n",i,*popValue);
popValue = popstack(&s[i]);
}
putchar('\n');
}
return 0;
}
このコードは正しく機能しており、出力は次のとおりです。
s[0]=3
s[0]=2
s[0]=1
s[1]=6
s[1]=5
s[1]=4
s[2]=9
s[2]=8
s[2]=7
s[3]=12
s[3]=11
s[3]=10
しかし、行 ||stackStruct->max = MAX_STACK_SIZE; を削除すると、||したがって、max の値を未定義にすると、次の出力が得られます。
s[1]=6
s[1]=5
s[1]=4
s[3]=12
s[3]=11
s[3]=10
s[2] と s[0] がありません。なぜこの2つだけ?max の値が定義されていない場合、プログラムがクラッシュするべきではありませんか?