C 在递归函数内传递双指针
我需要在递归函数中传递一个双指针,它的大小就是这个。这就是功能:C 在递归函数内传递双指针,c,pointers,recursion,dynamic-memory-allocation,C,Pointers,Recursion,Dynamic Memory Allocation,我需要在递归函数中传递一个双指针,它的大小就是这个。这就是功能: int main(){ PERSONA *tablaHash = (PERSONA *) malloc(1 * sizeof(PERSONA)); redimensionar(&tablaHash, regToInput, 1, "TypeA", 1); return 0; }; int redimensionar(PERSONA **tablaHash, PERSONA reg, int ta
int main(){
PERSONA *tablaHash = (PERSONA *) malloc(1 * sizeof(PERSONA));
redimensionar(&tablaHash, regToInput, 1, "TypeA", 1);
return 0;
};
int redimensionar(PERSONA **tablaHash, PERSONA reg, int tam, int tipoPruebaColision, int n) {
if (n < 15) {
n *= 2;
*tablaHash = realloc( *tablaHash, (n*tam) * sizeof(PERSONA) );
return ( redimensionar(tablaHash, reg, n*tam, tipoPruebaColision, n) ); //HERE IS THE ERROR
}
else {
insertar(*tablaHash, reg, tam, tipoPruebaColision);
return (tam);
}
}
所以内存重新分配是可以的,问题是将双指针传递给递归函数。你知道该怎么通过吗
问题是:如何将双指针传递给递归函数才能正常工作?第一个条目很好,递归条目没有,所以指针在递归中传递的不是很好
谢谢。经过8次迭代后,
tam
变得非常大,以至于溢出并变成0
:
1. n = 2, tam = 1
2. n = 4, tam = 2
3. n = 8, tam = 8
4. n = 16, tam = 64
5. n = 32, tam = 1024
6. n = 64, tam = 32768
7. n = 128, tam = 2097152
8. n = 256, tam = 268435456
9. n = 512, tam = 0
1.n=2,tam=1
2.n=4,tam=2
3.n=8,tam=8
4.n=16,tam=64
5.n=32,tam=1024
6.n=64,tam=32768
7.n=128,tam=2097152
8.n=256,tam=268435456
9n=512,tam=0
因此,您尝试分配
0
字节,而realloc
返回NULL。您应该经常检查malloc()/realloc()
是否返回空值。您是否阅读过,这对于人们快速准确地回答非常重要。insertar(tablaHash…
另外:您没有正确地使用realloc
,您是如何创建指针的?您如何调用该函数?请不要在注释后更改代码。只需发布显示问题的。谢谢,我已经检查过了,永远不要返回空值。问题是,很明显,realloc不是realloc父变量,只是局部变量,但我已经通过引用传递了父变量,我正在更新它的值。。。所以我不知道是什么happening@JuMoGar通过较少的迭代,它在我的测试中工作得很好:……等等,您是否意识到,realloc()
可以保持指针不变但仍然成功?是的,谢谢,我已经看到了这个答案的问题。这是父变量中的一个小错误
1. n = 2, tam = 1
2. n = 4, tam = 2
3. n = 8, tam = 8
4. n = 16, tam = 64
5. n = 32, tam = 1024
6. n = 64, tam = 32768
7. n = 128, tam = 2097152
8. n = 256, tam = 268435456
9. n = 512, tam = 0