【发布时间】:2016-11-21 05:19:47
【问题描述】:
所以我有以下功能。该函数接受一个目标 int ** 双指针并将一个源数组复制到它。
void copyMatrix(int ** target, int m, int n, int source[m][n])
{
int i,j;
target = (int **) malloc(m * sizeof(int *));
for (i = 0; i < m; i++)
target[i] = (int *)malloc(n * sizeof(int));
for(i=0; i < m; i++){
for(j=0; j < n; j++){
target[i][j] = source[i][j];
}
}
printf("%d ", target[i][j]);
}
当我在 for 循环之后调用 printf 时,我得到一个段错误,但如果我在 for 循环内调用 printf,它会正确打印 target[i][j]。为什么是这样?我正在为此撕毁我的头发......
【问题讨论】:
-
您认为
i和j的值在循环之外是多少? -
您需要将指针传递给您的
**target,因此它变为***target。然后在分配时使用*target = ...。您当前正在尝试修改 (double) 指针本身,而不是它指向的值。 -
尽管您可能应该避免拥有三重取消引用的值。你可以做一次作为练习。考虑在
copyMatrix函数之外分配target,或者将其返回(并且不要传递它)。由于您必须在当前编写的函数之外释放它,因此您最好让copyMatrix表现得像malloc和朋友一样。 -
感谢大家的cmets。我想我在大约 30 秒内学到的关于指针的知识比以往任何时候都多