我在一个文件中有两个数字(每行一个),我试图读入一个c ++数组。我使用下面的代码,但在运行时遇到以下错误:
分段错误:11
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main () {
string line;
ifstream myfile ("temp2.csv");
std::vector<double> myArray;
int index = 0;
if (myfile.is_open())
{
while (! myfile.eof() )
{
getline (myfile,line);
cout << line << endl;
// myArray[index++] << line;
myArray[index++] = atoi( line.c_str() );
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
答案 0 :(得分:2)
你做不到
push_back
这是一个空矢量。您需要#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <stdlib.h>
using namespace std;
int main () {
string line;
ifstream myfile ("temp2.csv");
std::vector<double> myArray;
int index = 0;
if (myfile.is_open())
{
while (! myfile.eof() )
{
getline (myfile,line);
cout << line << endl;
// myArray[index++] << line;
myArray.push_back(atoi( line.c_str() ));
}
myfile.close();
}
else cout << "Unable to open file";
return 0;
}
个元素。或者用足够的内存初始化它。
这应该有效:
std::vector<double> myArray;
答案 1 :(得分:1)
在这一行:
myArray[index++] = atoi( line.c_str() );
使用默认构造函数创建矢量。从文档中可以看出,默认构造函数创建了一个空向量。
在这一行:
Cannot find protocol declaration for FIRMessagingDelegate.
您可以通过连续增加索引来访问向量中的元素。但是这些元素不存在且索引超出范围,因为向量是空的。在向量范围之外访问具有未定义的行为。
TL; DR你忘了在矢量中添加任何元素。
答案 2 :(得分:1)
代码远比它需要的复杂得多。一次读取一个值要简单得多:
std::vector<double> myArray;
double value;
std::ifstream myfile(temp2.csv);
if (!myfile) {
std::cout << "Unable to open file\n");
return EXIT_FAILURE;
}
while (myfile >> value)
myArray.push_back(value);