Я подозреваю, что я делаю что-то немое здесь, но я получаю seg-ошибки на встроенной платформе Linux (компилятор GCC), когда я пытаюсь запустить pthread_rwlock_init() в rwlock, встроенном в структуру.pthread_rwlock_init() вызывает ошибку сегментации
struct rwlock_flag {
int flag; // Flag
pthread_rwlock_t * rwlock; // Reader/writer lock for flag
};
Следующая вызывает ошибку сегм ...
struct rwlock_flag * running;
running = (struct rwlock_flag *) malloc (sizeof(struct rwlock_flag));
rslt = pthread_rwlock_init(running->rwlock, NULL);
Как это делает ...
pthread_rwlock_t * rwlock_dg2;
pthread_rwlock_init(rwlock_dg2,NULL);
Однако следующие прекрасно работает ...
pthread_rwlock_t rwlock_dg;
pthread_rwlock_init(& rwlock_dg,NULL);
Любые мысли?
Обратите внимание, что '->' имеет более высокий приоритет, чем '&' (он имеет самый высокий приоритет для всех), поэтому скобки не нужны. – caf
Хорошая точка, @caf, это только я, будучи старым туманом. Меня научили указывать намерение в моем коде, и я читал это как адрес поля rwlock внутри структуры. '& run-> rwlock' не читается так ясно, как это можно было бы увидеть как' (& running) -> rwlock' - и да, я знаю, что это не так, но это более субъективная читаемость с моей стороны. Я вряд ли изменится в моем возрасте :-) – paxdiablo
Ahhhh! Я предположил, что pthread_rwlock_init сделал свой собственный malloc внутри, спасибо за вашу помощь. – KermitG