Передача указателя на функцию C++ в проекте C


У меня есть огромный проект C. И теперь мне нужна была функция C++, чтобы заполнить некоторые переменные.

С объявлением функции как extern "C", не было никаких проблем, чтобы вызвать функцию из проекта C.

Проблема в том, что мне нужно передать указатель на функцию C++, и в функции я хочу присвоить значение указателю. Но именно в этот момент происходит сбой программы с "ошибкой сегментации".

Есть ли способ заставить это работать? Или с ним невозможно работать указатели таким образом между C и C++?

Вызов функции как потока в C:

 Restwo = pthread_create(&num, NULL, (void *) function, &var);

Заголовок

 #ifdef __cplusplus
extern "C"
{  // Dies sorgt dafür, dass der Header sowohl in C als auch in C++ funktioniert
#endif

    int function(int *pITS);

#ifdef __cplusplus
}
#endif

Функция C++

extern "C" {
    int getNewLsaSignals(int *var) {
        printf("Successfully startedn"); //works
        var = 19; //doesn't work
        //insert some c++ code here
    }
}
1 2

1 ответ:

я хочу присвоить значение указателю.

В этом случае вам нужно изменить

 var = 19;

К

 *var = 19;

Потому что, скорее всего, var = 19; заставляет указатель указывать на место в памяти, недоступное из вашего приложения, поэтому любое последующее удаление ссылки на этот указатель вызовет неопределенное поведение.

Кроме того, почти всегда безопасно проверить NULL правильность входящего указателя, прежде чем непосредственно отсылать его.