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").
> 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?