Memcpy:错误的字节数
Memcpy: wrong number of bytes
我有一个可变大小的矩阵,我需要在每次迭代时对其进行备份。为此,我使用了一个相同大小(以字节为单位)的指针和 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行是正确的,最后几行不正确` t 恢复。如果我增加 memcpy 的第三个参数(例如,而不是 400 - 10 * 10 * sizeof(int) - 我尝试使用 600),矩阵的所有行都会被恢复。
我的问题是为什么会发生这种情况,我该如何解决。
memcpy(backUp, mainMat, columns * lines * sizeof(int));
您调用 memcpy
就好像 mainMat
指向或指向一个数组数组。但这是不可能的,因为 mainMat
是指向指针的指针。相反,它可能指向指向数组的指针数组。由于数组不是指针,因此这两种类型不兼容。
事实上,您的 memcpy
根本不需要复制 int
对象:它是将某些 int*
指针的字节复制到分配的内存中或从中复制出来。
如果您需要将所有 int
对象复制出和复制到与 mainMat
关联的存储中,您将需要遍历 mainMat
的元素并复制出并进入它包含的每个指针。这将一次复制一行或一列(取决于您的矩阵方向约定)。
我有一个可变大小的矩阵,我需要在每次迭代时对其进行备份。为此,我使用了一个相同大小(以字节为单位)的指针和 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行是正确的,最后几行不正确` t 恢复。如果我增加 memcpy 的第三个参数(例如,而不是 400 - 10 * 10 * sizeof(int) - 我尝试使用 600),矩阵的所有行都会被恢复。
我的问题是为什么会发生这种情况,我该如何解决。
memcpy(backUp, mainMat, columns * lines * sizeof(int));
您调用 memcpy
就好像 mainMat
指向或指向一个数组数组。但这是不可能的,因为 mainMat
是指向指针的指针。相反,它可能指向指向数组的指针数组。由于数组不是指针,因此这两种类型不兼容。
事实上,您的 memcpy
根本不需要复制 int
对象:它是将某些 int*
指针的字节复制到分配的内存中或从中复制出来。
如果您需要将所有 int
对象复制出和复制到与 mainMat
关联的存储中,您将需要遍历 mainMat
的元素并复制出并进入它包含的每个指针。这将一次复制一行或一列(取决于您的矩阵方向约定)。