Каково различие между “новым” и “malloc” и “calloc” в C++? [дубликат]

Вы должны использовать len для объекта списка, возвращенного r.json() вместо этого:

lst = r.json()
for i in range(len(lst)):
    x = lst[i]
    print(x)

Но тогда вам следует просто перебрать список вместо:

for x in r.json():
    print(x)
51
задан MarJamRob 19 February 2013 в 13:47
поделиться

7 ответов

new и delete являются особенностями C ++. Их не было в C. malloc - это старый школьный способ делать что-то на языке C. В большинстве случаев вам не нужно использовать его в C ++.

  • malloc выделяет неинициализированную память. Выделенная память должна быть освобождена с свободным .
  • calloc похож на malloc , но инициализирует выделенную память константой (0). Его нужно освободить с помощью free .
  • new инициализирует выделенную память, вызывая конструктор (если это объект). Память, выделенная с помощью new , должна быть освобождена с помощью delete (который, в свою очередь, вызывает деструктор). Вам не нужно вручную указывать нужный размер и приводить его к соответствующему типу. Таким образом, это ' s более современный и менее подверженный ошибкам.
71
ответ дан 7 November 2019 в 10:01
поделиться

Вам не нужно ничего, кроме нового. Это полная замена malloc в C ++.

Что касается различия: Malloc просто выделяет память. Новая память выделяется и вызывает конструкторы. Точно так же бесплатно просто освобождает память. Delete освобождает память и вызывает деструктор.

Слово предупреждения: не смешивайте две идиомы. Результаты не определены.

Новая память выделяется и вызывает конструкторы. Точно так же бесплатно просто освобождает память. Delete освобождает память и вызывает деструктор.

Слово предупреждения: не смешивайте две идиомы. Результаты не определены.

Новая память выделяется и вызывает конструкторы. Точно так же бесплатно просто освобождает память. Delete освобождает память и вызывает деструктор.

Слово предупреждения: не смешивайте две идиомы. Результаты не определены.

5
ответ дан 7 November 2019 в 10:01
поделиться

Когда вы создаете новый объект, пространство для объекта не только выделяется, но и вызывается конструктор объекта. Но это так, как это было сделано в C ++, malloc - это старый вариант C распределения памяти. calloc - это то же самое, что malloc , за исключением того, что он очищает память для всех нулевых битов.

  • calloc аналогична malloc, но также инициализирует память.
  • Следует использовать, если вам может потребоваться перераспределить память.
  • Данные не могут быть распределены с помощью malloc и освобождены с помощью delete или delete []
  • Также см. мой связанный ответ здесь

    20
    ответ дан 7 November 2019 в 10:01
    поделиться

    основное различие между new и malloc, которое я могу вспомнить, состоит в том, что вы не можете перераспределять память, выделенную new, используя realloc. Поэтому, если вы хотите увеличить / уменьшить размер блока памяти, вам нужно было выделить новый блок и скопировать все заново.

    Calloc позволяет инициализировать блок памяти, который вы выделяете, а malloc - нет.

    1
    ответ дан 7 November 2019 в 10:01
    поделиться
    • new выделяет и вызывает ctor (порядок не указан), удаляет dtor и освобождает память, выделенную вызовом new
    • malloc выделяет только некоторую память, free удаляет память, выделенную malloc
    • new может быть реализовано с использованием malloc (хотя и не требуется по стандарту).
    • calloc делает то же самое, что и malloc, а также обнуляет вновь выделенную память

    Как указывалось в других сообщениях: malloc / free является частью C ++, чтобы быть совместимым с C.

    См. Также: Страуструп: new vs malloc

    8
    ответ дан 7 November 2019 в 10:01
    поделиться

    Использование new означает, что конструкторы будут вызываться для вновь выделенной памяти. Если выделяемый объект не имеет конструкторов, new функционально идентичен malloc. и обычно должен использоваться вместо него.

    new может быть реализован или не реализован в терминах malloc - стандарт C ++ не требует ни того, ни другого подхода.

    5
    ответ дан 7 November 2019 в 10:01
    поделиться

    Когда вы new объект, пространство для объекта не только выделяется, но и вызывается конструктор объекта. Но это способ C ++, malloc - это старый способ выделения памяти в C . calloc то же самое, что malloc , за исключением того, что очищает память до всех нулевых битов.

    1
    ответ дан 7 November 2019 в 10:01
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: