我正在尝试研究指针和函数,所以我决定编写一个简单的代码。但我对新类型 SIGNAL 的变量有疑问。 每次运行代码时,我都会转储该错误。 我尝试重写代码,但仍然是同样的错误。我认为数据类型有问题,我尝试将其发送到 signalD。 但我不知道我错在哪里。
我尝试发送其他数据类型并使用函数进行操作,但结果仍然相同。
#include <stdio.h>
typedef void (*FUNC) (void*);
typedef FUNC (*SIGNAL) (int p, FUNC i);
void task1()
{
printf("Run task 1\n");
}
void task2()
{
printf("Run task 2\n");
}
void mainProcess(SIGNAL signalD, int i, void *p,void (*f)(void*))
{
task1();
signalD(p,f)(i);//I'm afraid that here is a mistake with data maybe (p,f)(f)
printf("Run main process\n");
}
void task3()
{
printf("Run task 3\n");
}
int main()
{
mainProcess(task2,5,0,task3);
return 0;
}
程序在执行signalD部分时崩溃。 我希望它应该打印: 运行任务 1 运行任务 2 运行主进程
最佳答案
你的task2函数需要返回一个FUNC
,不是吗?
FUNC task2(int i, FUNC p)
{
printf("Run task 2\n");
return p;
}
我认为你想这样调用它;
signalD(i,f)(p);
您的编译器出于某种原因向您发出警告,纠正它们,您就可以对代码进行一些修复。
关于c - 运行程序时出错 "Segmentation fault core dumped",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54026859/