我在理解 c 中如何使用指针传递值机制时遇到了一些麻烦。这是我人为的例子......
在我的main
函数中,我malloc
指向一个数组的指针int
:
int ** checkMe;
checkMe = malloc(sizeof(int *) * 10);
我知道这个操作设置了一个由 10 块内存组成的块,每个块都足够大以保存指向指针的int
指针。我在这 10 个块的开始处收到指针。
我有另一个函数将该双指针作为参数:
void test2dArray(int ** arr, int size) {
int i, j;
for (i = 0; i < size; i++) {
// arr[i] = malloc(sizeof(int) * size);
for (j = 0; j < size; j++) {
arr[i][j] = i * j;
}
}
}
每当我按原样离开评论部分时,并尝试像这样进入malloc
空间:int
main
int ** checkMe;
checkMe = malloc(sizeof(int *) * 10);
for (i = 0; i < 10; i++) {
checkMe[i] = malloc(sizeof(int));
}
test2dArray(checkMe, 10);
每当我checkMe
在test2dArray
调用main
.
但是,如果我改为inmalloc
的空间(通过取消注释上面的注释行)并将我的调用更改为:int
test2dArray
main
int ** checkMe;
checkMe = malloc(sizeof(int *) * 10);
test2dArray(checkMe, 10);
内存崩溃消失了,我可以checkMe
在函数调用后很好地引用。
我知道这checkMe
是test2dArray
按价值传递的。我认为这意味着返回的地址checkMe = malloc(sizeof(int *) * 10);
被复制到函数中。
我不明白为什么如果我没有内部空间int *
,商店会丢失checkMe
malloc
test2dArray