【发布时间】:2017-11-06 01:28:57
【问题描述】:
我有一个可变大小的矩阵,我需要在每次迭代时对其进行备份。为此,我使用了相同大小(以字节为单位)的指针和 memcpy 函数。
void DoSmth(int ** mainMat, ...){
int * backUp = malloc(columns * lines * sizeof(int));
...
memcpy(backUp, mainMat, columns * lines * sizeof(int)); // back-up
...
memcpy(mainMat, backUp, columns * lines * sizeof(int)); // restore
...
}
程序编译运行没有错误,但我注意到我备份和恢复的数据不完整,更确切地说只有矩阵的前n行是正确的,最后几行没有恢复强>。如果我增加 memcpy 的第三个参数(例如,而不是 400 - 10 * 10 * sizeof(int) - 我尝试使用 600),则矩阵的所有行都将恢复。
我的问题是为什么会发生这种情况,我该如何解决。
【问题讨论】:
-
您能否提供一些代码来重现该问题?
-
memcpy(backUp, *mainMat, columns * lines * sizeof(int));,memcpy(*mainMat, backup, columns * lines * sizeof(int)); -
@MayankJain 我无法提供更多代码,抱歉。但所有信息都在伪代码中。
-
@BLUEPIXY 您的解决方案只是减少了未恢复的行数,矩阵的最后一行仍然错误。
-
我猜是因为没有其他部分的信息。如果这些更正有误,则需要更多信息。