我已經在C中實現了一個簡單的隊列系統,但是我遇到了函數append的問題。這不會每次都發生,只是幾次,但我找不到共同點。使用C實現隊列實現中的分段錯誤
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;
}
沒有。 「要不要去越界」 ?當'i'爲0時,引用'*(h + i-1)',這是'h [-1]'.. – 2013-04-22 20:00:08
顯示如何初始化隊列 – 2013-04-22 20:01:17
因此...您永遠不會插入'0'值到你的隊列中? – 2013-04-22 20:02:15