2017-02-10 117 views
0
#include "xdrfile/xdrfile_xtc.h" 
#include "xdrfile/xdrfile.h" 
#include<stdio.h> 

int main() 
{ 
    int nat; 
    int step; 
    float time; 
    float prec; 
    int status; 
    matrix box; 
    rvec k[3]; 
    XDRFILE* xfp=xdrfile_open("test2.xtc","r"); 
    status=read_xtc(xfp,nat,&step,&time,box,k,&prec); 
    xdrfile_close(xfp); 
    return 0; 
} 

我試圖運行使用XTC圖書館閱讀GROMACS的軌跡幀...我得到一個錯誤代碼,XTC文件讀取錯誤

Segmentation error 

能否請你幫???

+0

您是否嘗試過在一個調試器中運行定位*,其中*在代碼中崩潰發生? –

+0

我會開始添加'if(xfp == NULL){perror(「Error!」);返回1;}'才能讀取數據。 – LPs

+0

只包含了「if」步驟......沒有什麼不同......分段錯誤仍然存​​在...... –

回答

2

this code

第二參數nat尋找必須被設置爲一個值檢索read_xtc_natoms功能。無論如何,該值必須被初始化。

此外,數組k的寬度必須與nat的值相匹配。

#include "xdrfile/xdrfile_xtc.h" 
#include "xdrfile/xdrfile.h" 
#include<stdio.h> 

int main(void) 
{ 
    int nat; 
    int step; 
    float time; 
    float prec; 
    int status; 
    matrix box; 
    int status; 

    char fileName[] = "test2.xtc"; 

    status = read_xtc_natoms(fileName, &nat); 

    if (status != exdrOK) 
    { 
     XDRFILE* xfp = xdrfile_open(fileName, "r"); 
     if (xfp != NULL) 
     { 
      rvec k[nat]; 
      status = read_xtc(xfp, nat, &step, &time, box, k, &prec); 
      xdrfile_close(xfp); 
     } 
     else 
     { 
      perror("File not opened:"); 
     } 
    } 
    else 
    { 
     fprintf(stderr, "read_xtc_natoms failure; return code %d", status); 
    } 

    return 0; 
} 

在我以前VLAs創建k個陣列上面的代碼,但你可以使用動態內存太:

#include "xdrfile/xdrfile_xtc.h" 
#include "xdrfile/xdrfile.h" 
#include<stdio.h> 

int main(void) 
{ 
    int nat; 
    int step; 
    float time; 
    float prec; 
    int status; 
    matrix box; 
    int status; 

    char fileName[] = "test2.xtc"; 

    status = read_xtc_natoms(fileName, &nat); 

    if (status != exdrOK) 
    { 
     rvec *k = malloc(nat * sizeof(rvec)); 

     if (k != NULL) 
     { 
      XDRFILE* xfp = xdrfile_open(fileName, "r"); 
      if (xfp != NULL) 
      { 
       status = read_xtc(xfp, nat, &step, &time, box, k, &prec); 
       xdrfile_close(xfp); 
      } 
      else 
      { 
       perror("File not opened:"); 
      } 

      free(k); 
     } 
     else 
     { 
      fprintf(stderr, "Error in dynamic allocation of k vector\n"); 
     } 
    } 
    else 
    { 
     fprintf(stderr, "read_xtc_natoms failure; return code %d", status); 
    } 

    return 0; 
} 
+0

是的......它正在編譯成功,並提供正確的輸出...你能請解釋我的問題是什麼? –

+0

正如我寫的yje read_xtc函數想要一個數組,並且數組的寬度必須與使用'read_xtc_natoms'函數檢索的元素的數量相匹配。在你的代碼中,你創建了一個小的數組以適應你文件中的所有數據,所以當讀取函數嘗試寫出超出數組範圍的時候,它會發生分段錯誤 – LPs