内存泄漏,重复的strdup

时间:2016-02-23 00:10:11

标签: c memory-leaks strdup

我正在创建一个从linux_dirent结构中获取的文件名数组(d)。 在循环的每次迭代中,使用

获得文件名
srcList[aSz] = d_entry;

并将指向此的指针添加到数组中:

d_entry = strdup(d->d_name);
srcList[aSz] = d_entry;
free(d_entry);

由于指针数组需要有效内存指向我无法执行此操作:

free(d_entry)

在最后一次使用数组后使用 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; } 只释放strdup / malloc为最后一个d_entry实例分配的内存。

Valgrind确认内存泄漏。

有没有办法解决这个问题,或者我应该在创建数组中的指针之前使用say memcpy将文件名移动到单独的缓冲区。

核心循环:

{{1}}

1 个答案:

答案 0 :(得分:1)

如评论中所述,泄漏由

确定
for ( i=0; i< size;i++)
   free( srcList[i] );

不再需要数组时