Стандарт C не предусматривает какой-либо модели владения памятью, кроме того, что если вы выделяете память с помощью malloc
(или связанных подпрограмм), память «принадлежит» (зарезервировано для) программе C, которая Выделил его.
Вы можете разрабатывать дополнительные модели собственности. В показанном коде подпрограмма X
выделяет память с помощью malloc
, а затем «отдает» память подпрограмме Y
. Y
записывает адрес памяти в очередь, которую она поддерживает. Если мы рассмотрим Y
как часть набора подпрограмм, которые управляют вещами в этой очереди (с Y
для добавления вещей, Z
для удаления вещей и, возможно, других подпрограмм), мы можем создать модель, в которой когда-то память дается этому набору подпрограмм, эти подпрограммы «владеют» памятью и отвечают за то, чтобы в конечном итоге освободить память или передать владение некоторым другим подпрограммам.
Y
явно обозначает свое владение, устанавливая указатель, который X
передано ему на NULL
, в заявлении *buffer_p = NULL;
. Это не является обязательным для передачи права собственности - собственность является концептуальной вещью, которую можно передать простым пониманием (возможно, посредством хорошей документации). Некоторые люди предпочитают устанавливать указатели на NULL
, когда они больше не должны использоваться, потому что это рассматривается как средство предотвращения ошибок, когда указатель непреднамеренно используется, когда его не следует.