深度复制阵列在C。。。马洛克?
我正在尝试用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
顺便说一句,这是一个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,复制整数数组而不是字符串也不重要吗?@Live2Enjoy7memcpy
复制字节,不关心这些字节所包含的数据类型,所以复制整数也不重要。memcopy就是这样。我编辑了你的答案,因为它需要是sizeof(g.originalBoard),而不是g.board。我在这里跳过malloc函数,因为我在结构中声明了数组beforehand@Live2Enjoy7不,这是g.board
,因为这是需要复制的。memcopy是他们的出路。我编辑了你的答案,因为它需要是sizeof(g.originalBoard),而不是g.board。我在这里跳过malloc函数,因为我在结构中声明了数组beforehand@Live2Enjoy7不,这是g.board
,因为这是需要复制的。