Ошибка при запуске программы "Ошибка сегментации ядра сброшена" - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь изучить указатели и функции, поэтому я решил написать простой код. Но у меня проблема с переменной нового типа SIGNAL. Каждый раз, когда код работает, я получаю сообщение об ошибке. Я пытался переписать код, но это все та же ошибка. Я думаю, что проблема с типами данных, которые я пытаюсь отправить на сигнал D. Но я не могу понять, где я ошибаюсь.

Я пытался отправить другие типы данных и играл с функциями, но результат все тот же.

#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 Запустить основной процесс

1 Ответ

0 голосов
/ 03 января 2019

Ваша функция task2 должна возвращать FUNC не так ли?

FUNC task2(int i, FUNC p)
{
    printf("Run task 2\n");
    return p;    
}

Также я думаю, что вы хотите назвать это так;

signalD(i,f)(p);

ВыКомпилятор дает вам предупреждения по какой-то причине, исправьте их, и вы сможете получить некоторые исправления для своего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...