Diferencia entre revisiones de «malloc()»

De ArduWiki
Saltar a: navegación, buscar
(Vea también)
 
(No se muestran 3 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
 
== Descripción ==
 
== Descripción ==
Asignar bloque de memoria
+
Asignar bloque de memoria.
 +
 
 
Asigna un bloque de bytes de tamaño de memoria y devuelve un puntero al principio del bloque.  
 
Asigna un bloque de bytes de tamaño de memoria y devuelve un puntero al principio del bloque.  
  
 
El contenido del bloque de memoria recién asignado no se inicializa, permaneciendo con valores indeterminados.  
 
El contenido del bloque de memoria recién asignado no se inicializa, permaneciendo con valores indeterminados.  
  
Si el tamaño es cero, el valor de retorno depende de la implementación de la biblioteca en particular (puede o no ser un puntero nulo ), pero el puntero devuelto no debe eliminarse.
+
Si el tamaño es cero, el valor de retorno depende de la implementación de la biblioteca en particular (puede o no ser un puntero nulo), pero el puntero devuelto no debe el[[iminarse.
 
 
 
 
 
 
  
  
Línea 14: Línea 12:
 
Este programa genera una cadena de la longitud especificada por el usuario y la rellena con caracteres alfabéticos. La longitud posible de esta cadena solo está limitada por la cantidad de memoria disponible paramalloc  
 
Este programa genera una cadena de la longitud especificada por el usuario y la rellena con caracteres alfabéticos. La longitud posible de esta cadena solo está limitada por la cantidad de memoria disponible paramalloc  
  
Carreras de datos
 
Solo se modifica el almacenamiento al que hace referencia el puntero devuelto. No se accede a ninguna otra ubicación de almacenamiento mediante la llamada.
 
Si la función reutiliza la misma unidad de almacenamiento liberada por una función de desasignación (comogratis o realloc), las funciones se sincronizan de tal manera que la desasignación ocurre completamente antes de la siguiente asignación.
 
  
  
Línea 27: Línea 22:
 
== Parámetros ==
 
== Parámetros ==
 
;tamaño: Tamaño del bloque de memoria, en bytes.
 
;tamaño: Tamaño del bloque de memoria, en bytes.
;size_t: es un tipo integral sin signo.
+
;size_t: es un tipo entero sin signo. [[unsigned int]]
  
 
== Retorno ==
 
== Retorno ==
Línea 35: Línea 30:
  
 
== Comentarios ==
 
== Comentarios ==
 +
* Solo se modifica el almacenamiento al que hace referencia el puntero devuelto. No se accede a ninguna otra ubicación de almacenamiento mediante la llamada.
 +
* Si la función reutiliza la misma unidad de almacenamiento liberada por una función de desasignación (comogratis o [[realloc()]]), las funciones se sincronizan de tal manera que la desasignación ocurre completamente antes de la siguiente asignación.
  
 
== Advertencias ==
 
== Advertencias ==
 +
Nada.
  
 
== Ejemplo ==
 
== Ejemplo ==
Línea 60: Línea 58:
 
== Vea también ==
 
== Vea también ==
 
* [[free()]]
 
* [[free()]]
* [[malloc()]]
 
 
* [[calloc()]]
 
* [[calloc()]]
 
* [[realloc()]]
 
* [[realloc()]]

Revisión actual del 20:52 24 jul 2019

Descripción

Asignar bloque de memoria.

Asigna un bloque de bytes de tamaño de memoria y devuelve un puntero al principio del bloque.

El contenido del bloque de memoria recién asignado no se inicializa, permaneciendo con valores indeterminados.

Si el tamaño es cero, el valor de retorno depende de la implementación de la biblioteca en particular (puede o no ser un puntero nulo), pero el puntero devuelto no debe el[[iminarse.


Este programa genera una cadena de la longitud especificada por el usuario y la rellena con caracteres alfabéticos. La longitud posible de esta cadena solo está limitada por la cantidad de memoria disponible paramalloc



Sintaxis

malloc();

Parámetros

tamaño
Tamaño del bloque de memoria, en bytes.
size_t
es un tipo entero sin signo. unsigned int

Retorno

  • En caso de éxito, un puntero al bloque de memoria asignado por la función.

El tipo de este puntero es siempre void*, que se puede convertir al tipo de puntero de datos deseado para que no se pueda distinguir.

  • Si la función no pudo asignar el bloque de memoria solicitado, se devuelve un puntero nulo.

Comentarios

  • Solo se modifica el almacenamiento al que hace referencia el puntero devuelto. No se accede a ninguna otra ubicación de almacenamiento mediante la llamada.
  • Si la función reutiliza la misma unidad de almacenamiento liberada por una función de desasignación (comogratis o realloc()), las funciones se sincronizan de tal manera que la desasignación ocurre completamente antes de la siguiente asignación.

Advertencias

Nada.

Ejemplo

byte funcion(){
   int i,n;
   char * buffer;
   printf ("How long do you want the string ?");
   scanf ("%d", &i);
   buffer = (char*) malloc(i+1);
   if (buffer==NULL){
      exit (1);
   }
   for (byte n=0; n<i; n++){
      buffer[n]=rand()%26+'a';
   }
  buffer[i]='\0';
  printf ("Random string: %s\n", buffer);
  free (buffer);
}

Vea también

Referencias