Problema con punteros.

Iniciado por maxim_o, 24 Junio 2016, 18:28 PM

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

maxim_o

Hola! Tengo un problema con unos punteros. Quiero pasar a una función un puntero a un doble puntero sin inicializar y dos cadenas de texto. Y en esa función me reserve espacio en la matriz de manera dinámica y me asigne esas cadenas, pero me tira un fallo de acceso de memoria al acceder al segundo miembro del array. Aquí el código:



void copia(char *destino,char *origen){
     int i=0;

     for(i=0;origen[i]!='\0';i++)
  destino[i] = origen[i];

     destino[i]='\0';

}
void funcion(char ***arg1, char *arg2, char *arg3){
      *arg1= (char **)malloc(2*(sizeof(char *)));
      *arg1[0] = (char *)malloc(5*sizeof(char)); //"HOLA\0"
      *arg1[1] = (char *)malloc(6*sizeof(char)); //"ADIOS\0"
      copia(*arg1[0],"HOLA");
      copia(*arg1[1],"ADIOS");
}


int main(){

      char **ptr;
      funcion(&ptr,"HOLA", "ADIOS");
      printf("%s",ptr[0]);
      printf("%s",ptr[1]);
}






AlbertoBSD

Hola no he encontrado el erro sin embargo cambie la forma de acceder a los apuntadores y funciono bien, aun asi estoy intrigado.

Te dejo el codigo.

void funcion(char ***arg1, char *arg2, char *arg3){
*arg1= (char **)malloc(2*(sizeof(char *)));
arg1[0][0] = (char *)malloc(5*sizeof(char)); //"HOLA\0"
arg1[0][1] = (char *)malloc(6*sizeof(char)); //"ADIOS\0"
copia(arg1[0][0],arg2);
copia(arg1[0][1],arg3);
}

int main(){
char **ptr;
funcion(&ptr,"HOLA\0", "ADIOS\0");
printf("%s\n",ptr[0]);
printf("%s\n",ptr[1]);
}


Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

class_OpenGL

El problema es cuestión de prioridades. Los corchetes tienen prioridad sobre el asterisco, así que cuando haces *arg1[1] es como si hicieras *(arg1[1]). Para solucionar el problema, tendrías que poner paréntesis para que el asterisco tome prioridad: (*arg1)[1]

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL