C 当双指针传递给函数时,它会发生什么情况
我在理解c中带指针的传递值机制如何工作时遇到了一些困难。这是我做作的例子C 当双指针传递给函数时,它会发生什么情况,c,stack,double-pointer,C,Stack,Double Pointer,我在理解c中带指针的传递值机制如何工作时遇到了一些困难。这是我做作的例子 在mymain函数中,Imalloc指向int数组的指针: int ** checkMe; checkMe = malloc(sizeof(int *) * 10); 据我所知,该操作将一个边设置为一个包含10个内存块的块,每个块的大小足以容纳指向int指针的指针。我在这个由10个块组成的块的开始处收到指针 我有另一个函数,它将双指针作为参数: void test2dArray(int ** arr, int size
在my
main
函数中,Imalloc
指向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;
}
}
}
每当我在test2dArray
调用main
之后迭代checkMe
时,就会出现内存崩溃
但是如果我将malloc
改为test2dArray
中int
的空间(通过取消上面注释行),并将我的调用从main
更改为:
int ** checkMe;
checkMe = malloc(sizeof(int *) * 10);
test2dArray(checkMe, 10);
内存崩溃消失了,我可以在函数调用后正常引用checkMe
我知道,
checkMe
正在按值传递到test2dArray
。我认为这意味着,checkMe=malloc(sizeof(int*)*10)返回的地址代码>被复制到函数中
我不明白为什么int*
的checkMe
存储的int*
如果我不malloc
从test2dArray
中分配空间,当你在main
中分配时,你没有分配10个整数
checkMe[i] = malloc(sizeof(int));
换成
checkMe[i] = malloc(sizeof(int) * 10);
当您在main
中分配时,您没有分配10个整数
checkMe[i] = malloc(sizeof(int));
换成
checkMe[i] = malloc(sizeof(int) * 10);
仅适用于指向至少10*sizeof(int)
内存的10个指针数组。您应该将上面的行更改为checkMe[i]=malloc(sizeof(int)*10)
仅适用于指向至少10*sizeof(int)
内存的10个指针数组。您应该将上面的行更改为checkMe[i]=malloc(sizeof(int)*10)
您的bug就是这两者之间的区别:
checkMe[i] = malloc(sizeof(int));
这是:
arr[i] = malloc(sizeof(int) * size); // size = 10
您的错误是以下两者之间的区别:
checkMe[i] = malloc(sizeof(int));
这是:
arr[i] = malloc(sizeof(int) * size); // size = 10
你所说的“撞击”是什么意思?@Potatoswatter-这是“粉碎”堆栈的新术语吗?可悲的是,我在我的项目和我上面设计的示例中都错误地做到了这一点。谢谢大家让我直截了当地了解这个可笑的简单错误,我把它变成了一个更大的东西……你说的“碰撞”是什么意思?@potatosatter-这是“粉碎”堆栈的新术语吗?可悲的是,我在我的项目和我上面设计的示例中都做得不正确。谢谢你们让我明白了这个可笑的简单错误,我把它变成了更大的东西。。。