【发布时间】:2016-04-22 11:58:09
【问题描述】:
我在将返回的整数值转换为 void 指针时遇到问题。尝试了该站点的一些选项,但我的问题似乎仍未解决。尽管程序编译时没有代码错误,但我遇到了分段错误。我是不是瞎了,我的代码有错误吗?
#include<pthread.h>
#include<stdio.h>
#include<stdint.h>
int ackermann(int a, int b)
{
if(a==0)
return a+1;
else if(a>0 && b==0)
{
return ackermann(a-1, 1);
}
else if(a>0 && b>0)
{
return ackermann(a-1,ackermann(a,(b-1)));
}
}
int main(int argc, char* argv[])
{
int a = atoi(argv[1]);
int b = atoi(argv[2]);
int c = ackermann(a,b);
void *ptr = &c;
pthread_t mythread;
if(pthread_create(&mythread, NULL, ptr, NULL))
{
printf("Could not create a thread\n");
}
pthread_exit(NULL);
return 0;
}
【问题讨论】:
-
对我来说很好:ideone.com/AMD4k0
-
提示:为什么要浪费
argc? -
pthread_create的第三个参数是指向函数的指针(在本例中为ackerman),但您传递的是指向int的指针 -
你想用
pthread_create调用哪个函数? -
Alter Mann 是对的:
int c = ackermann(a,b);行启动函数,计算结果并将其存储在整数中。当您执行 pthread_create ptr 指向整数c时 - 您正在尝试在主线程中启动整数,而不是函数,并且计算早已结束。
标签: c linux void-pointers