在函数递归中传递双指针
Passing double pointer inside a function recursive
我需要在重新分配这个大小的递归函数中传递一个双指针。这是函数:
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);
}
}
这个函数没有重新分配好内存(过程没问题,错误在递归调用)。我试过这个功能,它工作正常:
int redimensionar(PERSONA **tablaHash, PERSONA reg, int tam, int tipoPruebaColision, int n) {
n *= 2;
*tablaHash = realloc( *tablaHash, (n*tam) * sizeof(PERSONA) );
insertar(*tablaHash, reg, tam, tipoPruebaColision);
}
所以内存重新分配没问题,问题是将双指针传递给递归函数。知道应该如何通过吗?
问题是:如何将双指针传递给递归函数才能正常工作?第一个条目很好,递归条目没有,所以指针在递归中没有通过。
谢谢。
经过 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
因此,您尝试分配 0
个字节和 realloc
return 个 NULL。你应该经常检查 malloc()/realloc()
return NULL.
我需要在重新分配这个大小的递归函数中传递一个双指针。这是函数:
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);
}
}
这个函数没有重新分配好内存(过程没问题,错误在递归调用)。我试过这个功能,它工作正常:
int redimensionar(PERSONA **tablaHash, PERSONA reg, int tam, int tipoPruebaColision, int n) {
n *= 2;
*tablaHash = realloc( *tablaHash, (n*tam) * sizeof(PERSONA) );
insertar(*tablaHash, reg, tam, tipoPruebaColision);
}
所以内存重新分配没问题,问题是将双指针传递给递归函数。知道应该如何通过吗?
问题是:如何将双指针传递给递归函数才能正常工作?第一个条目很好,递归条目没有,所以指针在递归中没有通过。
谢谢。
经过 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
因此,您尝试分配 0
个字节和 realloc
return 个 NULL。你应该经常检查 malloc()/realloc()
return NULL.