C++读取大文件并将数据放入数组中

C++ Reading a Large File and Putting Data in an Array

本文关键字:数组 数据 读取 文件 C++      更新时间:2023-10-16

我有一个文件,里面有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)。

如果您想分配一个较小的数组,然后在文件很长的情况下扩大它;然后,您必须具体执行所有这些操作,即当达到某个计数时分配更大的数组,复制所有值,并删除旧数组。