Diferencia entre revisiones de «malloc()»

De ArduWiki
Saltar a: navegación, buscar
(Advertencias)
(Vea también)
 
Línea 58: Línea 58:
 
== Vea también ==
 
== Vea también ==
 
* [[free()]]
 
* [[free()]]
* [[malloc()]]
 
 
* [[calloc()]]
 
* [[calloc()]]
 
* [[realloc()]]
 
* [[realloc()]]

Revisión actual del 00:52 25 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