我不知道为什么会收到编译器警告和分段错误。
可以检查出来吗?
struct thread_data{
int thread_id;
char *message;
};
void *print_message_function( void *ptr )
{
int s,j;
char *line;
line = (char *) ptr;
s=sizeof(line);
struct thread_data td[s];
printf("%s \n",line[2]);
for(j=0;j+3<s;j++) {
td[j].thread_id = (int)line[j+3];
td[j].message = (char *)line[j+1];
printf("message : %s \n ",td[j].message);
}
}
有一些不好的事情:
sizeof
代替strlen
?该sizeof
行只是一个指针的大小(我认为是4个字节)。struct thread_data td[s]
非常糟糕。您不能静态分配具有未知数字的数组。在您的情况下,因为您犯了错误2,所以它是已知的,但是我不确定编译器是否知道。使用malloc
。line[2]
是一个字符,你为什么用%s
不%c
?-这可能是引起警告/分段故障的原因。它使用那里的任何字符作为指针,并访问非法内存。请阅读C教程。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句