XTC文件读取错误

XTC file reading error

#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 的轨迹帧...我收到错误,

Segmentation error

你能帮忙吗???

正在查看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;
}