创建巨大矩阵时的问题

时间:2011-04-12 13:31:01

标签: c++

我正在尝试使用随机字符创建一种表并将其写入文件,但我遇到了问题。当我想创建大表时出现问题。例如,对于具有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;

}

提前感谢您的帮助!

5 个答案:

答案 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