У меня огромный проект C.
И теперь мне нужна функция C ++ для заполнения некоторых переменных.
С объявлением функции как extern «C», было нетрудно вызвать функцию из C Project.
Проблема в том, что мне нужно передать указатель на функцию 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 started\n"); //works
var = 19; //doesn't work
//insert some c++ code here
}
}
Я хочу присвоить значение указателю.
В этом случае вам нужно изменить
var = 19;
в
*var = 19;
потому что, скорее всего, var = 19;
заставляет указатель указывать на область памяти, которая недоступна для вашего приложения, поэтому любая последующая де-ссылка этого указателя будет вызывать неопределенное поведение.
Кроме того, почти всегда безопасно проверить NULL
перед входящим указателем.
Других решений пока нет …