Problema con funcion palindroma en forma recursiva

Iniciado por palacio29, 12 Junio 2019, 03:45 AM

0 Miembros y 1 Visitante están viendo este tema.

palacio29

Hola

Tengo que hacer un ejercicio en el cual tengo que ir recorriendo un arreglo dinamico de caracteres en forma recursiva para saber si es palindromo o no.
La funcion recibe el arreglo dinamico y la longitud de la palabra.
Mi problema creo que es el IF, voy printeando lo que sucede y nose porque la funcion sigue mas alla de lo que yo querria...es decir..la idea es que corte cuando la longitud sea mayor a cero, y voy viendo que llega hasta el -5 y no se porque...hice el recorrido de la funcion en  papel, y tampoco encuentro el error..es como que sigue y no se porque


#include <stdio.h>
#include <stdlib.h>
int palindromo(char*arreglo,unsigned int longitud);
int main()
{
    char*arreglo=NULL;
    int r;
    arreglo=malloc(sizeof(500));
    arreglo="ana";
    printf("%s",arreglo);
    r=palindromo(arreglo,3);
    printf("\nEl valor es %d",r);
    return 0;
}

int palindromo(char*arreglo,unsigned int longitud)
{
    printf("Longitud: %d",longitud);
    if(longitud>0)
    {
        printf("La letra del arreglo es: %c - La letra a comparar al final es: %c - La longitud es: %d \n",*(arreglo),*(arreglo+longitud-1),longitud);
        if((*arreglo)==(*(arreglo+longitud-1)))
        {

            return palindromo(arreglo+1,longitud-2);
        }
        else
        {
            return 0;
        }
    }
    else
    {
     return 1;
    }

}

K-YreX

Tu problema no está en la función sino en los parámetros... :silbar:
El segundo parámetro es un <unsigned> por lo que no puede tomar valores negativos, entonces cuando el número de caracteres es par funciona correctamente porque termina con <longitud = 0> pero cuando el número de caracteres es impar como es tu caso, el último caso sería <longitud = -1> pero al ser <unsigned> no permite el valor de -1 para la longitud y por eso tienes un problema de acceso en memoria.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;