深度复制阵列在C。。。马洛克?

深度复制阵列在C。。。马洛克?,c,multidimensional-array,malloc,deep-copy,C,Multidimensional Array,Malloc,Deep Copy,我正在尝试用C语言制作数组的深度副本(原版为副本): 顺便说一句,这是一个9x9二维阵列。语法是什么(编译器给出了一个以上行的错误…?这是正确的使用位置。你可能想要 g.originalBoard = (int *)malloc(9 * 9 * sizeof(int)); if (NULL == g.originalBoard) { /* malloc failed, so handle the error somehow */ } memcpy(g.originalBoard, g.b

我正在尝试用C语言制作数组的深度副本(原版为副本):


顺便说一句,这是一个9x9二维阵列。语法是什么(编译器给出了一个以上行的错误…?

这是正确的使用位置。你可能想要

g.originalBoard = (int *)malloc(9 * 9 * sizeof(int));
if (NULL == g.originalBoard) {
    /* malloc failed, so handle the error somehow */
}
memcpy(g.originalBoard, g.board, 9 * 9 * sizeof(int));

您可能会注意到,在上述解决方案中,您必须使用
g.board[r*9+c]
访问索引(r,c)处的项目,而不是两个索引。这是因为它动态分配内存的方式——在编译时
g.board
g.originalBoard
只是指针,而不是数组。或者,如果您可以控制
g
类型的定义,则可以将矩阵的大小硬编码为

struct foo {
    int board[9][9];
    int originalBoard[9][9];
    /* Other fields here */
};

这样,您就不必为
g.board
g.originalBoard
分配额外的空间-每当您为
g
本身分配空间时,这两个字段都会自动分配。此外,您可以使用
g.board[r][c]
而不是
g.board[r*9+c]
这是正确的使用位置。你可能想要

g.originalBoard = (int *)malloc(9 * 9 * sizeof(int));
if (NULL == g.originalBoard) {
    /* malloc failed, so handle the error somehow */
}
memcpy(g.originalBoard, g.board, 9 * 9 * sizeof(int));

您可能会注意到,在上述解决方案中,您必须使用
g.board[r*9+c]
访问索引(r,c)处的项目,而不是两个索引。这是因为它动态分配内存的方式——在编译时
g.board
g.originalBoard
只是指针,而不是数组。或者,如果您可以控制
g
类型的定义,则可以将矩阵的大小硬编码为

struct foo {
    int board[9][9];
    int originalBoard[9][9];
    /* Other fields here */
};
这样,您就不必为
g.board
g.originalBoard
分配额外的空间-每当您为
g
本身分配空间时,这两个字段都会自动分配。另外,您可以使用
g.board[r][c]
而不是
g.board[r*9+c]

我想您需要这个:

 //assuming g.originalBoard is array of array of integers and same for g.board  
int *originalBoard = malloc(sizeof(g.board));
memcpy(originalBoard, g.board, sizeof(g.board));
我想你需要这个:

 //assuming g.originalBoard is array of array of integers and same for g.board  
int *originalBoard = malloc(sizeof(g.board));
memcpy(originalBoard, g.board, sizeof(g.board));

顺便说一下,如果您试图在阵列上执行以下“预期”任务

int*g.originalBoard[9][9]=malloc(sizeof(g.board[9][9])

那么您应该将上面的行更改为

int*g.originalBoard[8][8]=malloc(sizeof(g.board[8][8])


因为这是一个9x9二维数组,在C中数组是基于零的。

顺便说一句,如果您试图在数组上执行以下“预期”任务

int*g.originalBoard[9][9]=malloc(sizeof(g.board[9][9])

那么您应该将上面的行更改为

int*g.originalBoard[8][8]=malloc(sizeof(g.board[8][8])


因为这是一个9x9二维数组,在C中数组是零基的。

我以前研究过memcpy,复制的是整数数组而不是字符串,这无关紧要吗?@Live2Enjoy7
memcpy
复制字节,而不关心这些字节组成的数据类型,所以不,复制整数并不重要。我之前研究过memcpy,复制整数数组而不是字符串也不重要吗?@Live2Enjoy7
memcpy
复制字节,不关心这些字节所包含的数据类型,所以复制整数也不重要。memcopy就是这样。我编辑了你的答案,因为它需要是sizeof(g.originalBoard),而不是g.board。我在这里跳过malloc函数,因为我在结构中声明了数组beforehand@Live2Enjoy7不,这是
g.board
,因为这是需要复制的。memcopy是他们的出路。我编辑了你的答案,因为它需要是sizeof(g.originalBoard),而不是g.board。我在这里跳过malloc函数,因为我在结构中声明了数组beforehand@Live2Enjoy7不,这是
g.board
,因为这是需要复制的。