Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试访问向量时出现分段错误-cpp 我在C++中编写了一些代码。它从CSV文件中读取数据,然后简单地将第二行打印到屏幕上: vector<string> readCsvFileContent() { vector<string> buffer; try { ifstream inputFile; string line; inputFile.open("Input.csv", static_cast<std::ios::openmode>(std::ios::in) ); while (getline(inputFile,line)) { buffer.push_back(line); } inputFile.close(); } catch (ifstream::failure e) { cout<<"No file read"<<endl; throw e; } return buffer; }_C++_Csv_Segmentation Fault - Fatal编程技术网

尝试访问向量时出现分段错误-cpp 我在C++中编写了一些代码。它从CSV文件中读取数据,然后简单地将第二行打印到屏幕上: vector<string> readCsvFileContent() { vector<string> buffer; try { ifstream inputFile; string line; inputFile.open("Input.csv", static_cast<std::ios::openmode>(std::ios::in) ); while (getline(inputFile,line)) { buffer.push_back(line); } inputFile.close(); } catch (ifstream::failure e) { cout<<"No file read"<<endl; throw e; } return buffer; }

尝试访问向量时出现分段错误-cpp 我在C++中编写了一些代码。它从CSV文件中读取数据,然后简单地将第二行打印到屏幕上: vector<string> readCsvFileContent() { vector<string> buffer; try { ifstream inputFile; string line; inputFile.open("Input.csv", static_cast<std::ios::openmode>(std::ios::in) ); while (getline(inputFile,line)) { buffer.push_back(line); } inputFile.close(); } catch (ifstream::failure e) { cout<<"No file read"<<endl; throw e; } return buffer; },c++,csv,segmentation-fault,C++,Csv,Segmentation Fault,但当我运行代码时,我得到: reading from file 0 Segmentation fault (core dumped) 你会得到一个segfault,因为你读取的向量超出了向量的边界 inputData.size() // 0 i.e. empty inputData[1] // undefined behaviour 您的代码应该检查文件是否已成功打开。您可以这样做: if (!inputFile.is_open()) // throw or whatever 或者

但当我运行代码时,我得到:

reading from file
0
Segmentation fault (core dumped)

你会得到一个segfault,因为你读取的向量超出了向量的边界

inputData.size() // 0 i.e. empty
inputData[1] // undefined behaviour
您的代码应该检查文件是否已成功打开。您可以这样做:

if (!inputFile.is_open())
    // throw or whatever
或者,正如molbdnilo指出的那样,由于您似乎已经准备好尝试捕获,您可以要求流在失败时抛出:

inputFile.exceptions(std::ifstream::failbit);
要测试文件是否为空,只需检查您已经打印的
inputData.size()
,但忽略它

现在,剩下的问题是,为什么它在debug中工作而在release中不工作?嗯,我的水晶球电池没电了,但我可以推测你的构建有不同的工作目录,而另一个目录中的文件丢失或不可读。您尚未说明构建的功能,但这可能与此相关:

[100%]生成House1.csv

打开(“Input.csv”,静态转换(std::ios::in))


你会得到一个segfault,因为你读取的向量超出了向量的边界

inputData.size() // 0 i.e. empty
inputData[1] // undefined behaviour
您的代码应该检查文件是否已成功打开。您可以这样做:

if (!inputFile.is_open())
    // throw or whatever
或者,正如molbdnilo指出的那样,由于您似乎已经准备好尝试捕获,您可以要求流在失败时抛出:

inputFile.exceptions(std::ifstream::failbit);
要测试文件是否为空,只需检查您已经打印的
inputData.size()
,但忽略它

现在,剩下的问题是,为什么它在debug中工作而在release中不工作?嗯,我的水晶球电池没电了,但我可以推测你的构建有不同的工作目录,而另一个目录中的文件丢失或不可读。您尚未说明构建的功能,但这可能与此相关:

[100%]生成House1.csv

打开(“Input.csv”,静态转换(std::ios::in))


@不,它是通过值从函数返回的。没关系,不要用开局法。你为什么这么做?只需
open(file,mode)
您的问题不在您发布的函数范围内。@Lands主函数与输出相结合,揭示了segfault发生的原因。main打印输出中为0的向量大小。因此,
inputData[1]
具有未定义的行为。因此,问题是文件是空的、不存在或不可读。也许您正在以不同的方式运行调试和发布版本?也许他们有不同的工作目录,只有debug才有这个文件?可能该文件存在于发布目录中,权限错误。您的代码确实应该检查它是否实际打开了一个(非空)文件。您不知道一个文件中有多少行。因此,在没有先检查大小的情况下,不要硬编码一行访问。@不,它是通过值从函数返回的。没关系,不要用开局法。你为什么这么做?只需
open(file,mode)
您的问题不在您发布的函数范围内。@Lands主函数与输出相结合,揭示了segfault发生的原因。main打印输出中为0的向量大小。因此,
inputData[1]
具有未定义的行为。因此,问题是文件是空的、不存在或不可读。也许您正在以不同的方式运行调试和发布版本?也许他们有不同的工作目录,只有debug才有这个文件?可能该文件存在于发布目录中,权限错误。您的代码确实应该检查它是否实际打开了一个(非空)文件。您不知道一个文件中有多少行。因此,在没有先检查尺寸的情况下,不要硬编码线路访问。这是正确的答案。我应该等待编辑:)这是正确的答案。我应该等待编辑:)