0

C で単純なキュー システムを実装しましたが、関数 append に問題があります。これは毎回ではなく、ほんの数回しか発生しませんが、共通点を見つけることができません。

gdb は、セグメンテーション違反は行while (*h){が原因であると言っていますが、問題ないと思います。

関数は次のとおりです。

int pop (int *h){
    int ret = *h, i;

    for (i = 0; i < 52; i++){
        if (!*(h+i)){
            *(h+i-1) = 0;
            break;
        }
        else{
            *(h+i-1) = *(h+i);
        }
    }   
    return ret;
}


void append(int *h, int i){
    while (*h){
        ++h;
    }   
    *h = i;
}

どうもありがとうございました。

注:キューのサイズは固定されているため、キューに出入りする値の数は固定されているため、問題は範囲外になることではありません。

編集

私はそれを修正しました。機能する機能は次のとおりです。

int pop (int *h){
    int ret = *h, i;

    for (i = 1; i < 52; i++){
        if (!h[i]){
            h[i-1] = 0;
            break;
        }
        else{
            h[i-1] = h[i];
        }
    }   
    return ret;
}


void append(int *h, int i){
    int j;

    for (j = 0; j<52; j++){
        if (!h[j]) break;
    }   
    h[j] = i;
}
4

1 に答える 1