Пространства имён
Варианты
Действия

std::malloc

Материал из cppreference.com
< cpp‎ | memory‎ | c
 
 
 
Динамическое управление памятью
Низкоуровневое управление памятью
Аллокаторы
allocator
allocator_traits(C++11)
allocator_arg_t(C++11)
allocator_arg(C++11)
uses_allocator(C++11)
scoped_allocator_adaptor(C++11)
Неинициализированные хранилища
uninitialized_copy
uninitialized_copy_n(C++11)
uninitialized_fill
uninitialized_fill_n
raw_storage_iterator
get_temporary_buffer
return_temporary_buffer
Умные указатели
unique_ptr(C++11)
shared_ptr(C++11)
weak_ptr(C++11)
auto_ptr(устарело)
owner_less(C++11)
enable_shared_from_this(C++11)
bad_weak_ptr(C++11)
default_delete(C++11)
Поддержка сборки мусора
declare_reachable(C++11)
undeclare_reachable(C++11)
declare_no_pointers(C++11)
undeclare_no_pointers(C++11)
pointer_safety(C++11)
get_pointer_safety(C++11)
Разное
pointer_traits(C++11)
addressof(C++11)
align(C++11)
Библиотека C
malloc
calloc
 
Определено в заголовочном файле <cstdlib>
void* malloc( std::size_t size );

Выделяет size байт неинициализированной памяти.

Если выделение прошло успешно, то возвращается указатель на самый нижний (первый) байт выделенной памяти, которая подходящим образом выровнена для любого скалярного типа.

Если size равен нулю, то поведение этой функции зависит от реализации (может быть возвращен как нулевой указатель, так и ненулевой указатель, который не может быть использован для хранения данных).

Содержание

[править] Параметры

size - Количество байт памяти для выделения.

[править] Возвращаемое значение

Если функция выполнилась успешно, то возвращается указатель на начало выделенной памяти. Возвращенный указатель должен быть освобождён с помощью функции std::free() или std::realloc().

В случае сбоя возвращается нулевой указатель.

[править] Примечание

Эта функция не вызывает конструкторов и никак не инициализирует память. Также не существует готовых к использованию умных указателей, которые могли бы гарантировать, чтобы для каждого выделения памяти была вызвана соответствующая функция, освобождающая её. Наиболее предподчительный способ выделения памяти для C++ является использование RAII-функций std::make_unique, std::make_shared, конструкторов контейнеров, других механизмов или, в случае низкоуровневого библиотечного кода, оператора new.

[править] Пример

#include <iostream>   
#include <cstdlib> 
 
int main() 
{
    // Выделение памяти, достаточной для массива из 4 int
    int* p1 = (int*)std::malloc(4*sizeof(int));
    // Тоже самое, но с прямым указания типа  
    int* p2 = (int*)std::malloc(sizeof(int[4]));
    // Тоже самое, но без повторного указания имени типа
    int* p3 = (int*)std::malloc(4*sizeof *p3);  
 
    if(p1) {
        for(int n=0; n<4; ++n) // Заполнение массива
            p1[n] = n*n;
        for(int n=0; n<4; ++n) // Вывод его содержимого
            std::cout << "p1[" << n << "] == " << p1[n] << '\n';
    }
 
    std::free(p1);
    std::free(p2);
    std::free(p3);
}

Вывод:

p1[0] == 0
p1[1] == 1
p1[2] == 4
p1[3] == 9


[править] См. также

Распределение функций
Оригинал:
allocation functions
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(функция) [править]
получает неинициализированные хранения
Оригинал:
obtains uninitialized storage
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

(шаблон функции) [править]
C documentation for malloc