代码之家  ›  专栏  ›  技术社区  ›  JuMoGar

在递归函数[closed]内传递双指针

  •  1
  • JuMoGar  · 技术社区  · 6 年前

    我需要在递归函数中传递一个重新分配大小的双指针。这是函数:

    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 回复  |  直到 6 年前
        1
  •  1
  •   001    6 年前

    经过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
    

    因此,您尝试分配 字节和 realloc 返回NULL。你应该经常检查一下 malloc()/realloc() 返回NULL。