C程序:error: cast to 'void *' from smaller integer type 'int'

代码如下:

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,能成功构建。

现在就是不清楚远程服务器使用的是什么编译器,这个错误可能由于什么造成,怎么样修改能最大可能兼容。

阅读 14.1k
2 个回答

你的本意是把i传到线程函数里,相信你传进去也不会做指针使用。因此从你的角度上来讲,这没有错。
但是编译器不知道你的i变为指针的目的,它只是忠实得检查数据而已。
最好的办法如@白一梓所说,你直接传指针进去,到函数里再拿出来就ok了。
如果不愿意这样的话,我想你可以传(void *)(long)i进去

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏