gpt4 book ai didi

c - Memcpy:字节数错误

转载 作者:行者123 更新时间:2023-11-30 20:10:13 29 4
gpt4 key购买 nike

我有一个可变大小的矩阵,我需要在每次迭代时备份。为此,我使用相同大小(以字节为单位)的指针和 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 指向或指向数组的数组一样。但这是不可能的,因为 mainMat 是一个指向指针的指针。相反,它可能指向数组的指针数组。由于数组不是指针,因此这两种类型不兼容。

事实上,您的 memcpy 根本不需要复制 int 对象:它只是复制一些 int* 指针的字节进出分配的内存。

如果您需要将所有 int 对象复制到与 mainMat 关联的存储中,则需要循环遍历 mainMat< 的元素 并将其复制到其包含的每个指针中。这将一次复制一行或一列(取决于您的矩阵方向约定)。

关于c - Memcpy:字节数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47128506/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com