如何在文件中动态分配2D'数组'?

时间:2015-12-07 14:46:55

标签: c++ arrays file

因此,对于学校作业,我正在编写一个程序,该程序使用动态2D'数组'来对矩阵进行建模并对它们执行操作。所以我所做的是创建一个名为 matrix 的结构,它包含两个行和列的整数,以及一个用于'array'的双指针。我初始化了这样的指针:

int **ary=new int*[row];
for(int i=0;i<row;++i)
     ary[i]=new int[col];

现在我知道我的程序看起来非常缓慢,效率低下,对于本网站上的人来说一般都很糟糕,但请记住,我正在做学校作业而我不能使用花哨的像vector和all这样的东西。

然后我尝试编写然后读取二进制文件中的结构对象,就像使用fstream对象 y 一样:

matrix M;
y.write((char*)&M,sizeof M);
y.read((char*)&M,sizeof M);

该程序有效,但我输入的内容与文件读取的内容不同。为什么会这样?还有什么其他方法(使用fstream)将我的矩阵存储在文件中?

注意:很明显,我对这个网站是全新的,到目前为止我还不知道在这个网站上提问的正确礼仪。如果我的问题在某种程度上看起来很奇怪或者缺少某些信息,请发表评论。欢迎进行建设性修改。

2 个答案:

答案 0 :(得分:2)

如果您在一个块中分配所有内存,则可以这样做(如果您不想这样做,请参阅其他答案):

y.write(static_cast<char*>(block), sizeof(int) * row * col);
y.read(static_cast<char*>(block), sizeof(int) * row * col);

基本上我正在分配一个大型数组,然后使每一行指向数组的相应部分。 现在,如果你写

row

你会得到同样的东西。现在可能很明显,如果您在阅读时不知道col* What went wrong: A problem occurred configuring project ':mobile'. > Cannot evaluate module matrix : Configuration with name 'default' not found. 的值,则无效。您还需要将它们写入文件,并在阅读时阅读第一个文件。

答案 1 :(得分:1)

ary处的每个指针都是内存中的不同块,因此您需要单独编写和读取它们:

写:

for(int i=0;i<row;++i) 
   y.write((char*)&(M[i]),sizeof(int) * col);

读:

for(int i=0;i<row;++i) 
   y.read((char*)&(M[i]),sizeof(int) * col);

如果您发布matrix的定义,我可以提供更好的帮助。