problema con vaiable pasada por referencia

Lo que hace el programa ahora no importa en realidadpero,detecta cuantos grupos de numero cuyo siguiente numero del vector es inmediatamente superior,en el código indico donde esta el error,es que yo no le encuentro el porque
#include <stdio.h>
#include <stdlib.h>
int cuentaEscalera(int n,int vector[],int * contador,int * esEscalera);
/*
*
*/
int main() {
    int esEscalera;
    esEscalera=0;
    int vector[]={1,2,3,0,7,8,9,6};
    int contador;
    contador=0;
    cuentaEscalera(0,vector,&contador,&esEscalera);
    printf("%i",contador);
    system("pause");
    return (EXIT_SUCCESS);
}
int cuentaEscalera(int n,int vector[],int * contador,int * esEscalera){
    if(n>6){
        return *contador;
    }
    else{
        int esEscalera2;
        //en esta asignacion en la primera llamada lo hace bien pero en las siguientes la variable esEscalera2 no toma el valor de esEscalera si no un valor negativo de 10 cifras
        esEscalera2=*esEscalera;
        if(vector[n+1]==(vector[n]+1)){
            *esEscalera=1;
        }
        else
            *esEscalera=0;
        if(esEscalera2==0 && *esEscalera==1)
            *contador=*contador+1;
        cuentaEscalera(n+1,vector,&contador,&esEscalera);
    }
}

La función es:

int cuentaEscalera(int n,int vector[],int * contador,int * esEscalera);

Entero, puntero, puntero, puntero. La primera llamada la haces bien:

cuentaEscalera(0,vector,&contador,&esEscalera);

cuentaEscalera es recursiva, la vuelves a llamar desde sí misma:

cuentaEscalera(n+1,vector,&contador,&esEscalera);

Bien, ahí tienes el error. Dentro de cuentaEscalera, contador y esEscalera ya son punteros, así que en vez de pasarle un puntero, lo que estás pasándole es la dirección del puntero, es decir, un puntero a puntero. Debería ser:

cuentaEscalera(n+1,vector,contador,esEscalera);

Algunos compiladores avisan de esos posibles problemas con un warning, al menos gcc.
Bien explicado amuchamu. En la recursiva pasas un puntero a puntero, cuando quieres pasar un simple puntero (cosa que ya es, por lo que no pongas &).
2 respuestas