Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: palacio29 en 12 Junio 2019, 03:45 AM

Título: Problema con funcion palindroma en forma recursiva
Publicado por: palacio29 en 12 Junio 2019, 03:45 AM
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;
    }

}
Título: Re: Problema con funcion palindroma en forma recursiva
Publicado por: K-YreX en 12 Junio 2019, 04:07 AM
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.