действительно ли я должен освободить указатель, возвращенный getpwuid () в Linux?

Чтобы сгенерировать {1,2,3,4,5,6} в качестве результатов (т.е. удалить дубликаты смежных записей), рассмотрите следующий подход:

using System;
using System.Collections.Generic;

namespace Test
{
    public class Program
    {
        public static IEnumerable<int> RemoveDuplicates(int[] input)
        {
            int? old = null;

            foreach (var value in input)
            {
                if (value != old)
                    yield return value;

                old = value;
            }
        }

        public static void Main()
        {
            int[] getallen = new int[] { 1, 1, 2, 2, 3, 4, 4, 4, 5, 6 };
            Console.WriteLine(string.Join(",", RemoveDuplicates(getallen)));

            Console.ReadLine();
        }
    }
}

IEnumerable<int> возвращает значения без использования массива, а yield return используется для возвращать неповторяющиеся записи, по одной за раз.

value сравнивается с old, чтобы гарантировать, что дубликаты смежных записей игнорируются.

string.Join используется для объединения значений вместе с , между ними, поэтому они хорошо печатаются на консоли.

С точки зрения производительности, изменение объявления old на int old = (input?.FirstOrDefault() ?? 1) + 1; также может помочь, так что обнуляемые типы не будут задействованы. Я предпочитаю оставить это как обнуляемый тип для ясности).

7
задан Guy Avraham 16 July 2018 в 09:48
поделиться

3 ответа

Нет. Вы не должны освобождать результат. Можно только назвать свободным (3) на указателях выделенный на "куче" с malloc (3), calloc (3) или перевыделение (3).

Статические данные являются частью данных программы или bss сегментов и сохранятся до выходов процесса (или перезаписывается должностным лицом (2)).

9
ответ дан 6 December 2019 в 14:11
поделиться

Используйте *_r функции (getpwuid_r()) для ориентированных на многопотоковое исполнение (повторно используемых) функций, которые позволяют Вам предоставлять пространство буфера для размещения возвращенной информации в. Убедитесь проверка errno для успешности или неуспешности. Если Вы не используете повторно используемые функции, можно безопасно предположить, что функция возвращает данные, которые не должны быть освобождены, но будут также перезаписаны последовательными вызовами к той же функции.

5
ответ дан 6 December 2019 в 14:11
поделиться

На самом деле это возвращает указатель на уже существующую структуру, таким образом, Вы не должны освобождать его.

1
ответ дан 6 December 2019 в 14:11
поделиться
Другие вопросы по тегам:

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