我正在尝试使用随机字符创建一种表并将其写入文件,但我遇到了问题。当我想创建大表时出现问题。例如,对于具有10行x 5列的表,一切都很完美,但对于具有1.000.000行和100列的表,我有错误。你知道我怎么能解决这个问题???
我附上了我创建的代码:
#include<iostream>
#include<fstream>
#include<stdio.h>
#include<string>
#include<ctime>
#include<sstream>
using namespace std;
int main()
{
int rows, columns, rowsMax, columnsMax;
int element1;
char word[10];
cout<<"Write the number of rows of your table: ";
cin>>rowsMax;
cout<<"Write the number of columns of your table: ";
cin>>columnsMax;
string matriz[100000][5]; // Here I write the number of row and columns that must be the same than the numbers introduced as input
string table ("Table1");
ofstream myfile (table);
if(myfile.is_open())
srand(1);
for(rows=0;rows<rowsMax;rows++)
{
for(columns=0;columns<columnsMax;columns++)
{
element1 = rand() % 100000 + 1;
int len = rand () % 4 + 4;
word [len] = 0;
while (len) word [--len] = 'A' + rand () % 58;
myfile<<element1<<word;
myfile<<"|";
std::stringstream ss;
ss<<element1;
string mat;
mat +=ss.str();
mat +=word;
matriz[rows][columns]= mat;
}
myfile<<endl;
}
myfile.close();
system("pause");
return 0;
}
提前感谢您的帮助!
答案 0 :(得分:6)
您已在堆栈上分配了通常大小非常有限的数组。对于Windows,默认情况下大约为1Mb。
您可以在堆上分配数组。
答案 1 :(得分:1)
包含1.000.000行和100列的表:
string matriz[1000000][100];
表示1000000 * 100 * sizeof字符串&gt; 1MB,与默认的线程堆栈大小相比是巨大的。 即使您使用堆分配矩阵,大小也会超过2GB(默认进程虚拟内存)。
可能内存映射机制会有所帮助!
答案 2 :(得分:0)
1000000行和100列是非常多的数据(1亿个任何东西需要大量存储)。也许你没有足够的记忆?
是否填充了每一行和每列?如果没有,那么您可以使用sparse matrix representation保存某些内容。
答案 3 :(得分:0)
您正在堆栈上创建矩阵,其大小有限。尝试使用“new”或字符串向量在堆上分配它。
答案 4 :(得分:0)
如果您正在使用巨大的矩阵,则应使用链接列表。 example