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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Duda sobre malloc en C?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Duda sobre malloc en C?  (Leído 2,119 veces)
D4P50N

Desconectado Desconectado

Mensajes: 4


Ver Perfil
¿Duda sobre malloc en C?
« en: 19 Noviembre 2012, 22:23 pm »

Hola que tal, pues bueno actualmente no tengo ningún error en mi código usando malloc, sin embargo tengo una duda:
 :huh:
cuando utilizo esto:
char *MessageToSend;
MessageToSend=(char *)malloc(1 * sizeof(char);

porque al usar lo siguiente:

MessageToSend[0]="1";
MessageToSend[1]="1";
MessageToSend[2]="\0";

no me tirar error de que estoy desbordando el arreglo dinámico?

si lo hicieramos como si fuera un array estatico si tiraria el error, además tengo la duda de que si estoy reservando direcciones de memoria o estoy reservando posiciones de memoria, en este caso es de tipo char.

Espero haberme dado a entender.
****************************************************
Hola creo encontre la solución en este post:
http://www.foro.lospillaos.es/viewtopic.php?p=10767



Citar
Mariano Demarchi escribió:
> Programante escribió:
> >Tal vez la cadena no sea lo bastante larga. O estás desbordando otra
> >zona de memoria.
> >Si está reservada en el montón, tendrás al menos una página
> >(habitualmente 4096 bytes)
> >de espacio reservado para el proceso. Después puede que haya más espacio
> >reservado
> >para el programa (por ejemplo variables del entorno) y siga
> >sobreescribiendo alegremente
> >hasta que se acaba la cadena.
> Cuando se hace una llamada a malloc(), la memoria se reserva en el
> heap que es una porcion de memoria libre con este proposito, el
> alojamiento dinamico.
> Yo no se como funciona internamente malloc, esto depende de que
> algoritmo se ha usado lo cual puede cambiar de version en version de
> la libreria, pero hice algunas pruebas y siempre que hice
> (malloc(sizeof(int)*k),
> con k={1..6}, en sucesivas llamadas las posiciones de los bloques
> reservados difieren 32 bytes,
> con k={7..10}, en sucesivas llamadas las posiciones de los bloques
> reservados difieren 48 bytes,
> con k={11..}, en sucesivas llamadas las posiciones de los bloques
> reservados difieren 64 bytes
> hay que tener en cuenta que tengo ints de 4 bytes.
> Por otro lado cuando hago (malloc(sizeof(char)), se reservan cada 32
> bytes tambien.
> Entonces aparentemente malloc siempre reserva un minimo de 32 bytes,
> mas haya de que no se usen, o quizas solo se trata de una simple
> alineacion de palabras.
malloc() suele tener un tamaño mínimo de reserva por cuestiones de
implementación.
A lo que yo me refería era al espacio que le da el sistema.

Le pides un byte a malloc()
-Malloc decide que te va a dar 32
Malloc pide al SO una página de memoria
-El SO da una página de memoria a tu programa
Malloc separa 32 bytes y te los da a ti.

Simplemente escribiendo el array sólo obtendrás un fallo de segmentación
cuando te salgas de la página que te dio el SO.
Tendrás resultados incorrectos si cambias más allá de lo que te asignó
malloc (modificas otras variables reservadas dinámicamente, o la
estructura interna de la
reserva de memoria, que puede dar violaciones de segmento en free() por
ejemplo).

Es incorrecto escribir más de un byte en esa memoria (pues es lo único
que malloc() te garantiza "tuyo").


¿Alguien podria confirmarme si posiblemente haya encontrado mi respuesta?


« Última modificación: 20 Noviembre 2012, 00:16 am por D4P50N » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: ¿Duda sobre malloc en C?
« Respuesta #1 en: 19 Noviembre 2012, 23:23 pm »

Es correcto, al reservar memoria mediante esa función solo debes utilizar el numero de bytes indicados en la llamada.

Otro detalle (tal vez solo un error ortográfico) es utilizar comillas dobles en las asignaciones, por ejemplo:
Código
  1. MessageToSend[0] = "1";
Ya que la literal "1" resulta en la dirección en memoria donde se almacena (de tipo "char *") mientras que "MessageToSend[0]" es de tipo "char".

De nuevo tal vez sea solo un "error de dedazo" y en tu programa utilizas comillas simples para indicar (de la forma correcta) los caracteres '1', '1' y '\0'.

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
D4P50N

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: ¿Duda sobre malloc en C?
« Respuesta #2 en: 20 Noviembre 2012, 00:15 am »

Si es un error ortográfico muy feo, pero gracias por la explicación de las dobles comillas también tenia duda. Bueno pues lo marcare como resuelto, fue de gran ayuda tu respuesta. ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Malloc ... « 1 2 »
Programación C/C++
roser24 14 6,802 Ú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
Malloc y array ??
Programación C/C++
<<<-Basura->>> 2 3,203 Último mensaje 4 Octubre 2011, 15:19 pm
por LearningSpanishProgrammer
Dudas con malloc...
Programación C/C++
Metal-byte 2 2,011 Último mensaje 1 Enero 2012, 16:15 pm
por Metal-byte
Duda, problema de asignacion con Malloc
Programación C/C++
Fabi0lo 6 2,928 Último mensaje 25 Noviembre 2012, 18:31 pm
por 0xDani
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines