утечка памяти с повторным использованием strdup по
Я создаю массив имен файлов, полученных из структуры linux_dirent (d). На каждой итерации цикла имя файла получается с помощью
d_entry = strdup(d->d_name);
И указатель на это добавляется в массив:
srcList[aSz] = d_entry;
Поскольку массив указателей должен иметь допустимую память, чтобы указать на него, я не могу этого сделать:
d_entry = strdup(d->d_name);
srcList[aSz] = d_entry;
free(d_entry);
Использование free(d_entry)
после последнего использования массива освобождает только память, выделенную strdup/malloc для последнего экземпляра d_entry.
Вальгринд подтверждает память утечка.
Есть ли способ справиться с этим или я должен посмотреть на использование say memcpy для перемещения имен файлов в отдельный буфер перед созданием указателей в массиве.
Основной цикл:
for (bpos = 0; bpos < nread;) {
d = (struct linux_dirent *) (buf + bpos);
d_type = *(buf + bpos + d->d_reclen - 1);
if( d->d_ino != 0 && d_type == DT_REG || d_type == DT_UNKNOWN ) {
/* get directory entry */
d_entry = strdup(d->d_name); // << repeat allocations here
/* save pointer to filename in array 'srcList' */
srcList[aSz] = d_entry;
aSz++;
}
if ( aSz == DAY_COUNT +1 ) break;
bpos += d->d_reclen;
}