在函数递归中传递双指针

时间:2018-10-12 20:26:40

标签: 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 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);
}

所以内存重新分配很好,问题在于将双指针传递给递归函数。任何想法应该如何通过?

问题是:如何将双指针传递给递归函数以正常工作?第一项很好,递归项没有,因此指针在递归中没有通过。

谢谢。

1 个答案:

答案 0 :(得分:1)

经过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返回NULL。您应该始终检查malloc()/realloc()是否返回NULL。