C++读取大文件并将数据放入数组中
C++ Reading a Large File and Putting Data in an Array
我有一个文件,里面有500000个随机数字(6-7位)。我想把所有的数字一次写一个数组。Vector在这个代码中可以完美地工作,但是,恐怕我的老师不允许使用Vector。这是我的代码:
int line_no = 0;
int num;
int* num_array = new int[];
//Open file for input
fstream in_file("CSCI3380_final_project_dataset.txt", ios::in);
//Test for file opening
if (!in_file)
{
cout << "Cannot open words1.txt for reading" << endl;
exit(-1);
}
//Read file
while(true)
{
//Read one line at a time
in_file >> num;
//Test for eof
if (in_file.eof())
break;
num_array[line_no] = num;
//Increment array position
line_no++;
}
//Close the file
in_file.close();
当它试图写入第17个元素时,我收到以下错误消息:"readfile.exe中0x60ad86f8处未处理的异常:0xC0000005:读取位置0x003cb578时发生访问冲突。"
以下是前18个元素:
8809397
5937712
9169212
3467863
5730702
748737
6035700
577496
3601486
4490826
1749210
5058906
8252221
607331
5100676
1061913
3978612
2824658
有线索吗?
在网上阅读有关序列化的内容。您不需要使用vector,但可以创建自己的可序列化类。正如我预测的那样,这并不是不允许的。因此,串行化是一种简单地将类的二进制信息保存到文件中的机制,该文件允许您通过一点代码将其反序列化回内存。
这是一个语法错误:
int* num_array = new int[];
你必须在括号内指定一个数字。根据你的描述,也许你想要:
int* num_array = new int[500000];
当然,你的循环也应该检查你是否超过了你在这里选择的界限。
如果您的编译器没有抱怨这一行,那么它一定是某种奇怪的编译器扩展。请尝试在符合标准的模式下调用编译器(例如,对于g++
,请使用-std=c++98
或-std=c++11
以及-pedantic
)。
如果您想分配一个较小的数组,然后在文件很长的情况下扩大它;然后,您必须具体执行所有这些操作,即当达到某个计数时分配更大的数组,复制所有值,并删除旧数组。
相关文章:
- C++:__aligned(__alignof__) 导致字符数组数据出现问题?
- 很好的语法来获取对向量/数组数据的大小引用?
- 数组数据以错误的方式遍历 Python/Matlab
- 访问 Arduino 中的结构数组数据
- 在能够从 Web 浏览器访问大型数组数据的同时存储它的最可行方法是什么?
- 在C 类中声明数组数据
- 如何在 c++ 中将字符串数组数据写入输出文件
- 使用 stl::map 和 stl::unordered_map 对包含大量重复元素的数组数据进行排序
- 检索字符数组数据时出现问题
- 共享库的C 访问数组数据
- 将包含数组数据成员的结构保存到文件
- C++中的LinkedList字符数组数据
- 正在尝试使用if语句检查数组数据
- 在单独的数据中显示数组数据
- 如何在 c++ 中将字节类型的字符数组数据保存到文件中
- 从数组数据中缺少第一个元素的 DLL 返回C++结构
- 如何在C++中表示二进制字节数组数据
- 实现动态数组数据结构时出现"double free or corruption"错误
- 多维数组数据成员的运行时错误
- C++ :使用 * 显示数组数据的条形图