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

 

 


Tema destacado: Introducción a Git (Primera Parte)


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

Desconectado Desconectado

Mensajes: 29


Ver Perfil WWW
Duda, problema de asignacion con Malloc
« en: 24 Noviembre 2012, 23:56 pm »

Buenas, otra duda sencilla que no puedo responder, acá intentando asignar memoria a un arreglo de char y al parecer lo asigna mal, en que falla??

Tengo definida en una cabecera esta estructura que contiene un char
Código
  1. #ifndef ESTRUCTURA_H
  2. #define ESTRUCTURA_H
  3.  
  4. struct input{
  5. int prueba;
  6. char** mensaje; //habria que almacenarlo con malloc
  7. }str;
  8.  
  9. #endif

main.c
Código
  1. int i;
  2. str.mensaje = (char**)malloc(sizeof(char*)*72);
  3. for(i = 0; i<72; i++){ str.mensaje[i] = (char*)malloc(sizeof(char)*2048); }
  4.  
  5. printf("%d\n", sizeof(str.mensaje[2]));
Se supone que debería asignarse un tamaño 2048 para cada vector, pero en lugar de ello me imprime 8.

No se a que se debe este problema, alguien me podría aclarar en que me estoy equivocando??


En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Duda, problema de asignacion con Malloc
« Respuesta #1 en: 25 Noviembre 2012, 00:04 am »

El error viene en el printf.

Al hacer sizeof(str.mensjae[2]) justamente te va a devolver el tamaño del tipo "char*" que es, en 64 bits, de tamaño 8 :D

Si queres ver si se asignó bien, bueno no se, copiá algo de 2047 caracteres en ese espacio. Si ves que no dio seg fault, es porque se asignó bien la memoria ^^


En línea

Fabi0lo

Desconectado Desconectado

Mensajes: 29


Ver Perfil WWW
Re: Duda, problema de asignacion con Malloc
« Respuesta #2 en: 25 Noviembre 2012, 00:15 am »

Lo he probado y solo puede ingresar textos de tamaño 8 en cada vector, por eso intenté imprimirel tamaño de cada vector y justamente indicaba 8, pero no cuadra, de donde salio ese 8 cuando le estoy especificando 2048. No se donde es que no cuadra
En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Duda, problema de asignacion con Malloc
« Respuesta #3 en: 25 Noviembre 2012, 00:22 am »

El 8 es el tamaño de un puntero en tu arquitectura. Por eso ese printf ahí es correcto, pero no es correcta la forma de usarlo (no muestra lo que tu realmente quieres ver).

¿Podrías postear el code de cómo ingresaste los textos?
En línea

Fabi0lo

Desconectado Desconectado

Mensajes: 29


Ver Perfil WWW
Re: Duda, problema de asignacion con Malloc
« Respuesta #4 en: 25 Noviembre 2012, 00:57 am »

creo que ya encontré la pifia, entonces era el sizeof(str.mensaje[ i ]) ? quizás ahi agarre sentido, no se refiere al tamaño del vector en sí, si no as bien del puntero, tambien intenté cambiarlo por strlen(str.mensaje[ i ]), pero también se cae, nada mas queda poner el numero en duro 2048 xd

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "Lectura.h"
  4. #include "estructura.h"
  5.  
  6. extern struct input str;
  7.  
  8. void* lectura(void* inputFile){
  9.  
  10. char* linea = (char*)inputFile;
  11. FILE* archivo;
  12. char dir[20];
  13.  
  14. strcpy(dir, "textos/");
  15. strcat(dir, linea);
  16.  
  17. printf("\nDireccion del Texto es: /%s\n\n", dir);
  18.  
  19. int i;
  20. if((archivo = fopen(dir, "r")) != NULL){
  21. for(i = 0; !feof(archivo); i++){
  22. fgets(str.mensaje[i], sizeof(str.mensaje[i]), archivo);
  23. }
  24. }
  25. else{
  26. perror("error al abrir el fichero\n");
  27. return;
  28. }
  29. fclose(archivo);
  30. }

Una duda, entonces si quiero usar cada vector para modificarlo luego... como le hago referencia?
En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Duda, problema de asignacion con Malloc
« Respuesta #5 en: 25 Noviembre 2012, 01:50 am »

Si pides memoria y automáticamente utilizas strlen(str.mensaje[ i ]); no deberías confiar en lo que se imprime, porque si no lo inicializaste ahí hay basura.

Para ver bien, pides memoria, le asignas algo a dicho vector. Algo como no se...

Código
  1. strcpy(str.mensaje[0],"Hola este es el primer mensaje del vector");

Y luego imprimes:

Código
  1. printf("%s\n",str.mensaje[0]);
En línea

0xDani


Desconectado Desconectado

Mensajes: 1.077



Ver Perfil
Re: Duda, problema de asignacion con Malloc
« Respuesta #6 en: 25 Noviembre 2012, 18:31 pm »

Simplemente cuando hubo algun error malloc() retorna NULL. Si el valor de retorno es distinto de NULL se asigno bien la memoria, y si aun asi quieres convencerte de que se ha reservado:

Código
  1. for(i=0; i<2048; i++)
  2. str.mensaje[0][i] = 'a';
  3. str.mensaje[0][2048] = '\0';
  4. printf("Size: %d", strlen(str.mensaje[0]));
  5.  
En línea

I keep searching for something that I never seem to find, but maybe I won't, because I left it all behind!

I code for $$$
Hago trabajos en C/C++
Contactar por PM
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[DUDA] Teoria de asignacion...
Programación C/C++
.:BlackCoder:. 6 2,695 Último mensaje 4 Mayo 2010, 05:23 am
por .:BlackCoder:.
Malloc ... « 1 2 »
Programación C/C++
roser24 14 6,805 Último mensaje 5 Mayo 2010, 21:15 pm
por Akai
Ayuda con el uso de malloc
Programación C/C++
alexis33de 2 3,837 Último mensaje 21 Agosto 2010, 23:18 pm
por alexis33de
Problema con Malloc y cadenas de tamaño variable. « 1 2 »
Programación C/C++
samur88 13 10,086 Último mensaje 25 Noviembre 2010, 01:06 am
por samur88
Problema operador asignación y operador asignación [struct] c++
Programación C/C++
luiggy2 2 2,795 Último mensaje 16 Octubre 2013, 23:35 pm
por luiggy2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines