2014-11-05 76 views
-3

我有兩個全局變量COUNT=0;SIGN=0; 後來我#define SIZE 100插入排序分段錯誤

我不斷收到在我的代碼賽格故障,但我也不太清楚的地方,如果你們能幫助別針把它下來我會很感激。

它應該打印出插入從txt文檔讀入的數據時進行的分配總數。我不確定我是否理解什麼是任務,但這是我的失敗。

void insert(int x[], int n){ 
int key,y,z; 
COUNT++; 
    for(z=1; z<n-1; z++){ 
     key=x[z]; 
     SIGN++; 
     for(y=(z-1); y<0||key>=x[y]; y--){ 
      x[y+1]=x[y]; 
      SIGN++; 
     } 
     x[y+1]=KEY; 
    } 
int main(){ 
    FILE *fp; 
    fp=fopen("data.txt","r"); 
    int #temp; 
    int i=0; 
    int *sort=NULL; 
    sort=(int *)malloc(SIZE*sizeof(sort)); 
    while(fp!=NULL){ 
     fscanf(fp, "%d", temp); 
     sort[i]=(int)temp; 
     i++; 
    } 
    insert(sort, SIZE); 
    printf("number of Assignments=%d", SIGN); 
    return 0; 
} 
+3

你沒有在調試器中試過這個,是嗎? – 2014-11-05 18:17:50

+0

可能甚至沒有編譯... – mafso 2014-11-05 18:18:36

+0

我嘗試在valgrind中運行它,但它說我與fscanf的權限不好,而且我分配了兩次,但沒有釋放 – Wingman 2014-11-06 01:25:49

回答

0

在你的下面的代碼中,你不用擔心內存溢出。

while(fp!=NULL){ 
     fscanf(fp, "%d", temp); 
     sort[i]=(int)temp; 
     i++; 
    } 

你分配的內存大小INT。如果文件大小很大(超出分配的內存大小),那麼你的代碼將訪問超出分配內存的內存。所以這可能會導致問題