0
#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 の値が定義されていない場合、プログラムがクラッシュするべきではありませんか?

4

1 に答える 1