【发布时间】:2017-07-27 15:27:09
【问题描述】:
我正在尝试编写一个返回 C++ 结构数组的函数。我似乎能够从输入文件中填充数组。但是,我在返回结构数组时遇到了分段错误。我错过了什么吗?
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
谁能提出可能是什么问题?
【问题讨论】:
-
不要。使用
std::vector(如果大小未知)或std::array(如果大小已知)。另见:stackoverflow.com/questions/5605125/… -
您在我们看不到的代码中遇到了问题(可能是
split)。这就是我们要求minimal reproducible example 的原因。我的猜测是您对来自split的返回值管理不善。 -
我添加了在 main 中调用函数的方式,这可能会补全缺失的代码。我认为拆分不是问题,因为我已经彻底测试过。
-
@Rubber_duck 我建议逐行遍历您的代码,以找到错误的确切来源。除此之外,请遵循 Nathan 和 UKMonkey 的建议。