[英]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.