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;
}