2013-10-11 48 views
0
void enQ(int* q, int value){ 
    if(q[0] == -1){ 
     q[0] = value; 
     q[1] = -1; 
     return; 
    } 
    int found = 0; 
    int last_index; 
    int count = 0; 
    while(q[count] != -1){ 
     count++; 
    } 
    last_index = count; 
    int i = 0; 
    while(q[i] != -1){ 
     if(q[i] < value){ 
      int j = last_index; 
      while(j != i){ 
       q[j+1]=q[j]; 
       j--; 
      } 
      q[i]=value; 
      found = 1; 
      break; 
     } 
    } 
    if(found == 0){ 
     q[last_index] = value; 
     q[last_index+1] = -1; 
} 
} 


int main(int argc, char* argv[]) 
{ 
    int* q; 
    q[0] = -1; // initialize queue by making first element of new queue -1... 
    enQ(q,1); 
} 

我在C中做了一個簡單的優先級隊列。問題是當我在int *上調用enQ時,程序出現segfaults。我不知道爲什麼。我如何修復段錯誤?當試圖在隊列中優先排隊時出現seg-faulting C

回答

2

您正在使用未初始化的指針,這意味着它將指向一個隨機位置。要麼將q聲明爲數組,例如

int q[10]; 

或動態地爲它分配存儲器:

int *q = malloc(sizeof(int) * 10); 

的這些都創建十個值(索引09)空間。

同樣在最後一種情況下,在您動態分配內存的情況下,您必須在完成後記住free內存。


您可能還想跟蹤大小,所以您不會排隊等待很多項目。

+0

因此,我用\t int * q = malloc(sizeof(int)* 128)取代了int * q,但是當我調用enQ並添加一個項目時,它再次發生段錯誤。我真的不明白爲什麼它仍然在做。 – idungotnosn

+0

我剛剛使用了q [10],這一切都很好。謝謝。 – idungotnosn