【发布时间】:2015-12-07 14:46:55
【问题描述】:
因此,对于一项学校作业,我正在编写一个程序,该程序使用动态 2D“数组”对矩阵进行建模并对其执行操作。所以我所做的是创建一个名为 matrix 的结构,其中包含两个用于行和列的整数,以及一个用于“数组”的双指针。我这样初始化指针:
int **ary=new int*[row];
for(int i=0;i<row;++i)
ary[i]=new int[col];
现在我知道我的程序看起来会非常缓慢和低效,并且对于这个网站上的人来说通常是可怕的,但请记住,我正在做一个学校作业,我不能使用 fancy 诸如矢量之类的东西。
然后我尝试在二进制文件中写入然后读取结构对象,例如使用 fstream 对象 y,如下所示:
matrix M;
y.write((char*)&M,sizeof M);
y.read((char*)&M,sizeof M);
程序可以运行,但我输入的内容与文件读取的内容不同。为什么呢?还有哪些其他方法(使用 fstream)将我的矩阵存储在文件中?
注意:很明显,我对这个网站完全陌生,到目前为止,我还不知道在这个网站上提问的正确礼仪。如果我的问题在某些方面看起来很奇怪或缺少某些信息,请发表评论。欢迎进行建设性的修改。
【问题讨论】:
-
什么是
M?请提供MCVE。 -
提示:保存指向文件的指针没有意义。您应该编写每个 值 而不是指针。
-
C++ 不是 Java。停止
newing 你创造的一切。我们有std::vector、std::array和语言级数组。您不必new您使用的每个对象。 -
@G-man 在保存每个元素之前保存矩阵的大小。
-
@G-man 如果你想知道为什么你的例程永远无法工作,
sizeof M在你的read和write调用中的值是compile-time i> 价值。假设sizeof M是 50 个字节。无论矩阵的尺寸是多少,这 50 都不会改变值。可能是1 x 1或10000 x 10000。鉴于这些信息,即使您不知道指针的来龙去脉,您也会发现无法按照您已经完成的方式进行保存。