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

std::malloc

Материал из cppreference.com
< cpp‎ | memory‎ | c
 
 
 
 
Defined in header <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.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.

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