我有一个包含500,000个随机(6-7位)数字的文件。我想将所有数字一次一个地写入数组。 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个元素时收到以下错误消息: &#34; readfile.exe中0x60ad86f8处的未处理异常:0xC0000005:访问冲突读取位置0x003cb578。&#34;
以下是前18个要素:
8809397
5937712
9169212
3467863
5730702
748737
6035700
577496
3601486
4490826
1749210
5058906
8252221
607331
5100676
1061913
3978612
2824658
任何线索?
答案 0 :(得分:0)
在网上阅读有关序列化的内容。您不需要使用向量,但您可以创建自己的可序列化类。我预测这不是不允许的。因此序列化是一种简单地将类的二进制信息保存到文件的机制,允许您通过一些代码将其反序列化回内存。
答案 1 :(得分:0)
这是语法错误:
int* num_array = new int[];
您必须在括号内指定一个数字。根据您的描述,您可能想要:
int* num_array = new int[500000];
当然,你的循环也应该检查你不要超过你在这里选择的任何界限。
如果您的编译器没有抱怨该行,那么它必须是一些奇怪的编译器扩展。尝试在符合标准的模式下调用您的编译器(例如,g++
使用-std=c++98
或-std=c++11
和-pedantic
)。
如果你想分配一个较小的数组,如果文件结果很长,那么以后会增长它;然后你必须专门做所有这些,即当你达到一定的数量时分配更大的数组,并复制所有的值,并删除旧的数组。