closedir() 导致现有列表的节点发生变化

乔先生

这是我的函数的简化代码:

myList* listFilesInDirectory(char* path) {
    DIR* dir = opendir(path);
    myList* list = createList();
    struct dirent* entry;

    while ((entry = readdir(dir)) != NULL) {
        myNode* node = createNode(entry->d_name);
        addToList(list, node);
    }
    closedir(dir);
    return list;
}

我在主函数中使用的:

myList* sourceFiles = listFilesInDirectory("source/");
myList* destFiles = listFilesInDirectory("dest/");

问题是函数的第二次调用改变了在第一次调用中返回的列表元素。元素sourceFileslistFilesInDirectory("dest/");被调用后发生变化

但是当我closedir(dir)从函数体中删除 a 时,一切正常,并且 的元素sourceFiles不会改变。

我准备了一个简单的程序https://pastebin.com/9pTYmpm2所以你可以看看会发生什么。结果示例:

测试程序结果

如你所见,SourceFiles content 1SourceFiles content 2是不同的。第一个在listFilesInDirectory("dest/")调用之前打印,第二个调用之后打印。但是,如果我closedir(dir)从功能中删除,一切正常:

删除 closedir(dir) 后的结果

这里发生了什么?为什么会发生?如何预防?我不应该closedir()在我的程序中使用吗?

Uku Loskit

问题似乎是您正在使用直接从entry->d_name. 但是入口是堆栈分配的struct,一旦退出就会失效listFilesInDirectory

一个简单的修复:

while ((entry = readdir(dir)) != NULL) {
        myNode* node = createNode(strdup(entry->d_name));
        addToList(list, node);
}

但我建议您检查所有内容的返回值:opendir, closedir, 以及strdup

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

与PHP 4“ opendir / readdir / closedir”相比,使用PHP 5 DirectoryIterator到底有什么好处?

来自分类Dev

为什么修改不相关的变量会导致链接列表发生变化?

来自分类Dev

表格中的输入导致表格宽度发生变化

来自分类Dev

哪些情况会导致硬盘 UUID 发生变化?

来自分类Dev

即使矩形 A 的锚点发生变化,也保持矩形 B 在矩形 A 的顶部对齐

来自分类Dev

翻译动画会导致视图的填充位置发生变化,但布局不会发生变化

来自分类Dev

传递到函数后列表值发生变化

来自分类Dev

旋转值之间的变化会导致gameObject的位置发生变化

来自分类Dev

当Firestore数据库发生变化时,有没有办法更新单位列表?

来自分类Dev

键盘显示时,iOS 7 Web视图文本字段焦点发生变化

来自分类Dev

iBeacon在后台发生变化?

来自分类Dev

Android片段发生变化

来自分类Dev

Grep行的列发生变化

来自分类Dev

如何使布局发生变化?

来自分类Dev

$watch 服务发生变化时

来自分类Dev

oracle中的表发生变化

来自分类Dev

继承:被继承的值发生变化

来自分类Dev

CSS旋转会导致剪辑图像大小发生变化

来自分类Dev

为什么调用strcpy()导致我的源字符串发生变化?

来自分类Dev

未使用的typedef或struct定义会导致C程序中的行为发生变化吗?

来自分类Dev

Ocelot-更改网关中的上游请求主体不会导致下游请求发生变化

来自分类Dev

SVG元素悬停以导致其他SVG元素发生变化

来自分类Dev

以编程方式添加视图会导致Android中大小发生变化

来自分类Dev

是什么导致该指针的值从简单的函数调用中发生变化?

来自分类Dev

记录导致行值比较发生变化的确切值python

来自分类Dev

更改主节点后,DC / OS仪表板中的指标发生变化

来自分类Dev

为什么文件的Inode号发生变化,而没有其他变化?

来自分类Dev

为什么更改新列表时原始列表会发生变化?

来自分类Dev

在单击列表视图项时,行的整个背景颜色发生变化,而不仅仅是边框发生变化(使用卡UI布局)

Related 相关文章

  1. 1

    与PHP 4“ opendir / readdir / closedir”相比,使用PHP 5 DirectoryIterator到底有什么好处?

  2. 2

    为什么修改不相关的变量会导致链接列表发生变化?

  3. 3

    表格中的输入导致表格宽度发生变化

  4. 4

    哪些情况会导致硬盘 UUID 发生变化?

  5. 5

    即使矩形 A 的锚点发生变化,也保持矩形 B 在矩形 A 的顶部对齐

  6. 6

    翻译动画会导致视图的填充位置发生变化,但布局不会发生变化

  7. 7

    传递到函数后列表值发生变化

  8. 8

    旋转值之间的变化会导致gameObject的位置发生变化

  9. 9

    当Firestore数据库发生变化时,有没有办法更新单位列表?

  10. 10

    键盘显示时,iOS 7 Web视图文本字段焦点发生变化

  11. 11

    iBeacon在后台发生变化?

  12. 12

    Android片段发生变化

  13. 13

    Grep行的列发生变化

  14. 14

    如何使布局发生变化?

  15. 15

    $watch 服务发生变化时

  16. 16

    oracle中的表发生变化

  17. 17

    继承:被继承的值发生变化

  18. 18

    CSS旋转会导致剪辑图像大小发生变化

  19. 19

    为什么调用strcpy()导致我的源字符串发生变化?

  20. 20

    未使用的typedef或struct定义会导致C程序中的行为发生变化吗?

  21. 21

    Ocelot-更改网关中的上游请求主体不会导致下游请求发生变化

  22. 22

    SVG元素悬停以导致其他SVG元素发生变化

  23. 23

    以编程方式添加视图会导致Android中大小发生变化

  24. 24

    是什么导致该指针的值从简单的函数调用中发生变化?

  25. 25

    记录导致行值比较发生变化的确切值python

  26. 26

    更改主节点后,DC / OS仪表板中的指标发生变化

  27. 27

    为什么文件的Inode号发生变化,而没有其他变化?

  28. 28

    为什么更改新列表时原始列表会发生变化?

  29. 29

    在单击列表视图项时,行的整个背景颜色发生变化,而不仅仅是边框发生变化(使用卡UI布局)

热门标签

归档