繁体   English   中英

为什么此打印声明会搞砸?

[英]Why does this print statement screw up?

printf("%s\\n", (char*)ent->d_name); 给了我不确定的行为。 我在输出中得到的是奇怪的符号,有时后面是随机字母。 ent是一个不同的结构。

它是在传递给pthread的函数中声明的。

void * copyFile( void * arg ){

struct dirent *ent = (struct dirent *)arg;

printf("%s\n", (char*)ent->d_name);

}

并这样调用:

int ret = pthread_create(&thread_list[i], NULL, copyFile, &ent);

我尝试在调用函数的原始ent上打印名称,并且正常工作。 因此,问题出在转移和重新分配/广播中。

readdir函数使用静态内存来填充dirent结构。 也就是说,随后对readdir调用可能会覆盖相同的区域,并且在以后引用该部分内存会导致未定义的行为。

您需要在readdir调用之后立即复制该结构,然后将此副本传递给线程,而不是原始线程:

struct dirent *dp = readdir(dirp);
struct dirent *dp_on_the_heap = malloc(sizeof(struct dirent));
memcpy(dp_on_the_heap, dp, sizeof(struct dirent));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM