尝试读取包含 ints 并存储在 int vector 中的文件,但我不断收到错误"Segmentation fault (core dumped)"
Trying to read file which contains ints and store in int vector, but I keep getting "Segmentation fault (core dumped)" error
所以我为我的项目制作了这个练习文件,以尝试读取包含整数的文件,并将它们存储在 int 向量中。我的问题是每当我运行该程序时,它都会在调用readFile()
函数期间给我"分段错误(核心转储)"。
不介意额外的导入,我只是将相同的导入复制并粘贴到我所有的练习文件中。此外,cout << "hi" << endl;
只是查看程序何时出现错误。
#include <string>
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cassert>
#include <vector>
using namespace std;
vector<int> readFile(string fileName);
int main()
{
vector <int> intvec = readFile("ints.txt");
cout << "hi" << endl;
for (int i = 0; i < intvec.size(); i++)
{
cout << intvec[i] << endl;
}
return 0;
}
vector<int> readFile(string fileName)
{
ifstream inFile(fileName);
vector<int> inputVec;
int i = 0;
while (!inFile.eof())
{
inFile >> inputVec[i];
i++;
}
inFile.close();
return inputVec;
}
你会想要这样做
while (inFile >> i)
{
inputVec.push_back(i);
}
在代码中,定义inputVec
而不为其提供初始容量,因此可以假定其大小为 0。所以当你写inputVec[i]
时,你实际上是在尝试访问向量边界之外的索引。这就像访问大小为 4 的数组中的第 5 个元素。
通过使用push_back
,您可以将元素添加到矢量中,它将动态调整大小。
c++ std::vectors在添加到它们之前需要调整大小。尝试使用"push_back"函数,将它们添加到末尾并调整矢量大小以适合。
顺便说一句,与JavaScript不同,您不能使用"vector[i] ==value"来自动调整c/c ++数组/向量的大小。
顺便说一句,c数组和std::vector中的方括号[]运算符与JavaScript中的完全不同。JavaScript 数组是关联映射,使用 array[value] 会自动创建一个键"值"。但这非常缓慢。c/c++ 中的方括号运算符不是这样工作的。它们是一个更快的直接内存访问系统。
如果你有一个名为"myArray"的数组,并且你要求myArray[10],那么计算机只会查看计算机内存10地址之外的任何内容(乘以元素的大小,所以myArray[10]将比具有4字节值(如int或float)的数组开头多40个字节。
它是为纯粹的速度而设计的,因此没有添加任何边界检查。 这完全取决于 C/C++ 程序员,以确保您不会使用方括号运算符在边界之外读取或写入,但回报是程序要快得多。您可以将自己的边界检查添加到自己的代码中,也可以小心不要读取超出分配的范围。
使用std::copy
算法和迭代器,可以使用以下内容填充向量:
#include <fstream>
#include <iterator>
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> intvec;
std::ifstream ifs("ints.txt");
std::copy(std::istream_iterator<int>(ifs),
std::istream_iterator<int>(),
std::back_inserter(intvec));
}
注意:std::back_inserter
会自动为信息流中的每个项目调用push_back
。
- 示例外壳应用程序显示的 V8 "segmentation fault (core dumped)"错误
- 给定一个整数数组,需要在Max_Heap上运行操作。得到错误"segmentation fault",有什么想法吗?(C++)
- 导致Segmentation错误的结构中的矢量
- OpenGL "Segmentation fault"错误
- 如何修复访问动态数组中结构中的字符串变量时"segmentation fault (core dumped)"错误
- 如何修复 C++ 中的'Segmentation fault'错误
- 尝试读取包含 ints 并存储在 int vector 中的文件,但我不断收到错误"Segmentation fault (core dumped)"
- 为什么当我更改此代码时会给我"segmentation fault"错误?
- 尝试将文本文件加载到动态分配的 2D 数组中时出现'Segmentation fault'错误
- 由于while循环中的条件,导致Segmentation错误
- 取消引用会导致Segmentation错误
- 调用构造函数定义中的函数后收到Segmentation Fault 11错误
- 为什么我在运行程序时收到错误"segmentation fault"?
- 当我尝试从结构列表中访问内存时出现错误:" Program received signal SIGSEGV, Segmentation fault."
- 当g++静态链接pthread时,导致Segmentation错误,原因何在
- 为什么我的程序在运行后给出"segmentation fault"(核心转储)错误
- 在Qt错误显示:"Fault Module Name: Qt5Cored.dll"在win 7和调试时:"segmentation fault"在CentOS Linux和Win 7中
- 引用字符串参数导致Segmentation错误
- 为什么 g++ 在将节点指向数据字符时返回'Segmentation fault'错误?
- "Segmentation fault"与"run time"错误?