Espacios de nombres
Variantes
Acciones

std::malloc

De cppreference.com
< cpp‎ | memory‎ | c
 
 
Biblioteca de servicios
 
Gestión de memoria dinámica
Punteros inteligentes
(C++11)
(C++11)
(C++11)
(hasta C++17)
(C++11)
(C++23)
Asignadores de memoria
Recursos de memoria
Almacenamiento no inicializado
Algoritmos de memoria no inicializada
Algoritmos restringidos de memoria no inicializada
Apoyo para recolección de basura
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
(C++11)(hasta C++23)
Misceláneos
(C++20)
(C++11)
(C++11)
 
Definido en el archivo de encabezado <cstdlib>
void* malloc(std::size_t size );

Asigna size bytes de almacenamiento no inicializado.

Si la asignación tiene éxito, devuelve un puntero al byte más bajo (el primero) en el bloque de memoria asignado que está adecuadamente alineado para cualquier tipo escalar (al menos tan estrictamente como std::max_align_t).

Si size es cero, el comportamiento está definido por la implementación (se puede devolver un puntero nulo, o se puede devolver algún puntero no nulo que no se puede usar para acceder al almacenamiento, pero debe pasarse a std::free).

Se requiere que las siguientes funciones sean seguras frente a hilos:

Las llamadas a estas funciones que asignan o desasignan una unidad de almacenamiento particular ocurren en un orden total único, y cada llamada de desasignación sucede-antes que la siguiente asignación (si es que la hay) en este orden.

(desde C++11)

Contenido

[editar]Parámetros

size - Número de bytes a asignar.

[editar]Valor de retorno

En caso de éxito, devuelve el puntero al principio de la memoria recién asignada. Para evitar una fuga de memoria, el puntero devuelto se debe desasignar con std::free() o std::realloc().

En caso de falla, devuelve un puntero nulo.

[editar]Notas

Esta función no llama a los constructores ni inicializa la memoria de ninguna manera. No hay punteros inteligentes listos para usar que puedan garantizar que se llame a la función de desasignación coincidente. El método preferido de asignación de memoria en C++ es usar funciones listas para RAII std::make_unique, std::make_shared, constructores de contenedores, etc. y, en código de biblioteca de bajo nivel, la expresión new.

Para cargar un archivo grande, mapeo de archivos a través de funciones específicas del sistema operativo, por ejemplo mmap en POSIX o CreateFileMapping(A/W) junto con MapViewOfFile en Windows, es preferible a la asignación de un búfer para la lectura de archivos.

[editar]Ejemplo

#include <iostream> #include <cstdlib> #include <string>#include <memory>   int main(){constexprstd::size_t size =4;if(auto ptr =reinterpret_cast<std::string*>( std::malloc(size * sizeof(std::string)))){try{for(std::size_t i =0; i < size;++i)std::construct_at(ptr + i, 5, 'a'+ i);for(std::size_t i =0; i < size;++i)std::cout<<"ptr["<< i <<"] == "<< ptr[i]<<'\n';std::destroy_n(ptr, size);}catch(...){}std::free(ptr);}}

Salida:

p[0] == aaaaa p[1] == bbbbb p[2] == ccccc p[3] == ddddd

[editar]Véase también

Funciones de asignación.
(función)[editar]
(en desuso en C++17)(eliminado en C++20)
Obtiene almacenamiento sin inicializar.
(plantilla de función)[editar]
close