功能:一个Struct的数组

时间:2017-07-27 15:27:10

标签: c++ arrays struct

我正在尝试编写一个在c ++中返回struct数组的函数。我似乎能够从输入文件填充数组。但是,我在返回struct数组时遇到了段错误。我错过了什么吗?

Coordinates* GetCoordinates(string Input) {
        Coordinates* coor_array = new Coordinates[1000];
        int k = -1;

        string line;

        ifstream file;
        file.open(Input.c_str());

        while (!file.eof()){
                getline(file,line);
                k++;
                char** holder = split (line,' ');
                coor_array[k].element = holder[0];
                coor_array[k].x = atof(holder[1]);
                coor_array[k].y = atof(holder[2]);
                coor_array[k].z = atof(holder[3]);

                cout << "Atom:" << coor_array[k].element  << " X:" << coor_array[k].x << " Y:" << coor_array[k].y << " Z:" << coor_array[k].z <<endl;

        }
        return coor_array;
}

虽然我的结构定义如下:

struct Coordinates
{
        string element;
        double x,y,z;
};

我使用以下内容来调用我的函数:

Coordinates* coor_data = GetCoordinates(Input);

运行后,我收到以下错误:

 Atom:H X:26.4706 Y:30.0098 Z:64.4696
 Atom:O X:25.8063 Y:28.7746 Z:64.7809
 Atom:H X:25.6821 Y:30.626 Z:63.3106
 Segmentation fault

有人可以提出可能存在的问题吗?

1 个答案:

答案 0 :(得分:0)

使用for循环解决问题:

for(string line; getline(file,line);){

}

在阅读@NathanOliver推荐的那些页面之后,我仍然不太清楚为什么eof是个坏主意。从我收集到的,是因为eof试图读取下一行而不管它可能是最后一行吗?