Autor
|
Tema: Duda, problema de asignacion con Malloc (Leído 3,180 veces)
|
Fabi0lo
|
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 #ifndef ESTRUCTURA_H #define ESTRUCTURA_H struct input{ int prueba; char** mensaje; //habria que almacenarlo con malloc }str; #endif
main.c int i; str. mensaje = (char**)malloc(sizeof(char*)*72); for(i = 0; i <72; i ++){ str. mensaje[i ] = (char*)malloc(sizeof(char)*2048); } 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
Mensajes: 375
|
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 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
|
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
Mensajes: 375
|
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
|
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 #include <stdio.h> #include <string.h> #include "Lectura.h" #include "estructura.h" extern struct input str; void* lectura(void* inputFile){ char* linea = (char*)inputFile; FILE* archivo; char dir[20]; printf("\nDireccion del Texto es: /%s\n\n", dir ); int i; if((archivo = fopen(dir , "r")) != NULL ){ for(i = 0; !feof(archivo ); i ++){ fgets(str. mensaje[i ], sizeof(str. mensaje[i ]), archivo ); } } else{ perror("error al abrir el fichero\n"); return; } }
Una duda, entonces si quiero usar cada vector para modificarlo luego... como le hago referencia?
|
|
|
En línea
|
|
|
|
Ferno
Desconectado
Mensajes: 375
|
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... strcpy(str. mensaje[0],"Hola este es el primer mensaje del vector");
Y luego imprimes: printf("%s\n",str. mensaje[0]);
|
|
|
En línea
|
|
|
|
0xDani
Desconectado
Mensajes: 1.077
|
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: for(i=0; i<2048; i++) str.mensaje[0][i] = 'a'; str.mensaje[0][2048] = '\0';
|
|
|
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
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[DUDA] Teoria de asignacion...
Programación C/C++
|
.:BlackCoder:.
|
6
|
2,950
|
4 Mayo 2010, 05:23 am
por .:BlackCoder:.
|
|
|
Malloc ...
« 1 2 »
Programación C/C++
|
roser24
|
14
|
7,398
|
5 Mayo 2010, 21:15 pm
por Akai
|
|
|
Ayuda con el uso de malloc
Programación C/C++
|
alexis33de
|
2
|
4,045
|
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,600
|
25 Noviembre 2010, 01:06 am
por samur88
|
|
|
Problema operador asignación y operador asignación [struct] c++
Programación C/C++
|
luiggy2
|
2
|
3,045
|
16 Octubre 2013, 23:35 pm
por luiggy2
|
|