elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  problema con doble punteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: problema con doble punteros  (Leído 2,395 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
problema con doble punteros
« en: 26 Enero 2014, 23:11 pm »

Saludos tengo una variable que es de tipo char** p, esto es para que sea un arreglo que contenga cadenas de tamaño variable y despues estas variables asignarselas al elemento nombre del mismo tipo que esta en una estructura, el problema es que el codigo me truena y no se por que

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #define MAX 4
  5.  
  6. typedef struct
  7. {
  8.    char **nombre;
  9. }CODOP;
  10.  
  11. int main()
  12. {
  13.    int tam,tam1,tam2,tam3,i;
  14.    CODOP *x;
  15.    char **p;
  16.    x = (CODOP*)malloc(sizeof(CODOP));
  17.    p = (char**)malloc(MAX*sizeof(char*));
  18.    p[0] = "anita";
  19.    p[1] = "lava";
  20.    p[2] = "la";
  21.    p[3] = "tina";
  22.    tam = strlen(p[0]);
  23.    tam1 = strlen(p[1]);
  24.    tam2 = strlen(p[2]);
  25.    tam3 = strlen(p[3]);
  26.    x->nombre = (char**)malloc(MAX*sizeof(char*));
  27.    x->nombre[0] = (char*)malloc((tam+1)*sizeof(char));
  28.    x->nombre[1] = (char*)malloc((tam1+1)*sizeof(char));
  29.    x->nombre[2] = (char*)malloc((tam2+1)*sizeof(char));
  30.    x->nombre[3] = (char*)malloc((tam3+1)*sizeof(char));
  31.    strcpy(x->nombre[0],p[0]);
  32.    strcpy(x->nombre[1],p[1]);
  33.    strcpy(x->nombre[2],p[2]);
  34.    strcpy(x->nombre[3],p[3]);
  35.    for(i = 0;i < MAX;i++)
  36.       printf("%s\n",x->nombre[i]);
  37.    return 0;
  38. }
  39.  

gracias de antemano


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: problema con doble punteros
« Respuesta #1 en: 27 Enero 2014, 02:19 am »


Pues a mi me corre sin problemas. ¿Qué problema tienes?.

¡¡¡¡ Saluditos! ..... !!!!




En línea

nolasco281


Desconectado Desconectado

Mensajes: 319


Ver Perfil
Re: problema con doble punteros
« Respuesta #2 en: 27 Enero 2014, 04:45 am »

Hola amigo como te comento leosansan el código corre pero parece que hay algún error en los char yo no entiendo mucho los punteros pero eh leído un poco sobre ellos, y la mayoría dice que es mejor trabajar con cadenas.  Ya que dan menos problemas que los char. pero eso es lo que he leído.

Recuerda que un char solo almacena un carácter a menos que lo hagas por arreglos y manejar char con arreglos es un poco más complicado te recomendaría que provees string si logro que no me de error te comparto la solución.
Saludos.


« Última modificación: 27 Enero 2014, 04:47 am por nolasco281 » En línea

Lo que se puede imaginar... se puede programar.
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: problema con doble punteros
« Respuesta #3 en: 27 Enero 2014, 09:42 am »


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: problema con doble punteros
« Respuesta #4 en: 30 Enero 2014, 10:48 am »

Código
  1. CODOP *x; // => char ***; // en verdad es necesario esto ??
  2. char **p;
  3. x = (CODOP*)malloc(sizeof(CODOP));
  4.  
  5. // un puntero doble es como una matriz, necesita dos inicializaciones
  6. // primero una para las filas y luego hay que inicializar cada columna por separado
  7. // aqui solo estas inicializando las filas
  8. p = (char**)malloc(MAX*sizeof(char*));
  9.  
  10. // esto podria funcionar en c++... en c hay que usar strcpy
  11. // en cualquier caso, antes tienes que reservar memoria para p[0], p[1], ...
  12. p[0] = "anita";
  13. p[1] = "lava";
  14. p[2] = "la";
  15. p[3] = "tina";

Por cierto, no veo un solo free que libere la memoria...
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: problema con doble punteros
« Respuesta #5 en: 30 Enero 2014, 18:20 pm »

Código
  1. // esto podria funcionar en c++... en c hay que usar strcpy
  2. // en cualquier caso, antes tienes que reservar memoria para p[0], p[1], ...
  3. p[0] = "anita";
  4. p[1] = "lava";
  5. p[2] = "la";
  6. p[3] = "tina";

Por cierto, no veo un solo free que libere la memoria...
En C es valido porque antes de la asignación las literales "anita", "lava", etc. se sustituyen por las direcciones donde estas se almacenan y con ello se copia la dirección (pero no el contenido) del objeto.

Supongo solo es un programa para practicar el uso de punteros (honestamente no me gusta).

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con Punteros en C
Programación C/C++
aaronas 8 4,155 Último mensaje 2 Abril 2012, 00:12 am
por david_BS
Problema con punteros.
Programación C/C++
vazquinhos 4 2,782 Último mensaje 20 Septiembre 2012, 18:35 pm
por do-while
Problema con punteros
Programación C/C++
NEGRO_PABLO 3 3,009 Último mensaje 30 Noviembre 2012, 18:41 pm
por twins
Duda Punteros Dobles/Array de punteros
Programación C/C++
MisterJava 2 5,206 Último mensaje 30 Diciembre 2012, 20:19 pm
por MisterJava
Consulta sobre punteros y doble punteros
Programación C/C++
palacio29 4 3,429 Último mensaje 17 Mayo 2019, 20:40 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines