2012-11-09 137 views
1

即使兩個文件每個都有2^14個值,我也會得到此代碼的段錯誤。誰能告訴我爲什麼。分段錯誤 - 未知原因

#define N 128 
#include<stdio.h> 
#include <malloc.h> 
int A[N][N]; 
int B[N][N]; 
int C[N][N]; 
void mmul(); 

int main() 
{ 
    int p,q; 
    FILE *fp; 
    fp=fopen("A.txt","r"); 
    if(fp=NULL) 
     printf("Error\n"); 
    printf("A"); 
    for(p=0;p<(1<<7);p++) 
    { 
     for(q=0;q<(1<<7);q++) 
     { 
      fscanf(fp, "%d", &A[p][q]); 
     } 
    } 
    fclose(fp); 
    fp=fopen("B.txt","r"); 
    if(fp=NULL) 
     printf("Error\n"); 
    for(p=0;p<(1<<7);p++) 
    { 
     for(q=0;q<(1<<7);q++) 
     { 
      fscanf(fp, "%d", &B[p][q]); 
     } 
    } 
    fclose(fp); 
    printf("here"); 
    mmul(); 
} 

void mmul() 
{ 
    int i,j,k; 
    unsigned int sum; 
    for(i=0;i<N;i++) 
    { 
     for(j=0;j<N;j++) 
     { 
      sum=0; 
      for(k=0;k<N;k++) 
      { 
       sum=sum+(A[i][k]*B[k][j]); 
      } 
      C[i][j]=sum; 
     } 
    } 
} 
+2

如果你運行這個平臺調試器(GDB,等等),你可能會被告知*立即*是什麼導致seg-fault,這段代碼很可能是唯一引用原始指針的東西:FILE * fp和您的賦值,而不是評估檢查,爲NULL。 – WhozCraig

+0

-1我只是偷看了3個被標記爲相關的隨機問題,並在所有這些問題中發現了使用調試器或通過valgrind運行的建議。這清楚地表明你沒有[看看周圍](http://stackoverflow.com/faq#questions)那麼多。 – Massimiliano

回答

8

編譯警告

if (fp = NULL) 
5
if(fp=NULL) 
printf("Error\n");` 
  • 它是整個身體if。所以,如果沒有文件,你會得到一個NULL fp,打印「錯誤」,並繼續執行NULL fp。它會導致分段錯誤。

而且,它是一個分配,不是比較,讓您始終獲得NULL FP,而不是印刷錯誤。

您需要添加退出聲明:

if (fp == NULL) { 
    fprintf(stderr, "Error: failed to open file\n"); 
    return -1; 
} 
+0

請注意,這是一項任務。 – liori

+0

但文件在那裏。那麼是什麼問題 –

+0

哦,是的...得到它了!沒有仔細看 –