我正在尝试编写一个在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
有人可以提出可能存在的问题吗?
答案 0 :(得分:0)
使用for循环解决问题:
for(string line; getline(file,line);){
}
在阅读@NathanOliver推荐的那些页面之后,我仍然不太清楚为什么eof是个坏主意。从我收集到的,是因为eof试图读取下一行而不管它可能是最后一行吗?