Передача указателя на функцию 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 ответ:
я хочу присвоить значение указателю.
В этом случае вам нужно изменить
var = 19;
К
*var = 19;
Потому что, скорее всего,
var = 19;
заставляет указатель указывать на место в памяти, недоступное из вашего приложения, поэтому любое последующее удаление ссылки на этот указатель вызовет неопределенное поведение.Кроме того, почти всегда безопасно проверить
NULL
правильность входящего указателя, прежде чем непосредственно отсылать его.