代码如下:
for (i = 0; i < nthreads; i++)
{
nodes[i] = (int**)realloc(nodes[i], (sizeof(int *)*lnpages[i]));
pthread_create(&threads[i], NULL, worker, (void *)i);
}
编译器报错是 (void *)i
处,错误说明是 Error: cast to 'void *' from smaller integer type 'int'
PS: 这是在我上传到远程服务器时构建产生的错误,在我本机UBUNTU使用CLANG3.5编译没有任何问题,我在本机使用的构建命令是 clang -O0 -std=gnu11 -march=native -lm -lpthread pagerank.c -o pagerank
,能成功构建。
现在就是不清楚远程服务器使用的是什么编译器,这个错误可能由于什么造成,怎么样修改能最大可能兼容。
你的本意是把i传到线程函数里,相信你传进去也不会做指针使用。因此从你的角度上来讲,这没有错。
但是编译器不知道你的i变为指针的目的,它只是忠实得检查数据而已。
最好的办法如@白一梓所说,你直接传指针进去,到函数里再拿出来就ok了。
如果不愿意这样的话,我想你可以传(void *)(long)i进去