Я застрял в простом указателе/литье проблемы:C, отбрасывая массив структур, передаваемых через пустой указатель
Я пытаюсь передать в качестве аргумента функции PTHREAD в pthread_create массив из 2 структур. Вот код:
struct sockaddr_in addr_left, addr_right;
struct sockaddr_in* addr_vec [2] = {&addr_left, &addr_right};
pthread_create (&thread_forward, NULL, thread_func_forward, (struct sockaddr**)addr_vec);
Внутри thread_func_forward:
void * thread_func_forward (void * argv) {
struct sockaddr_in* addr_left = ((struct sockaddr_in*)argv + 0);
struct sockaddr_in* addr_right = ((struct sockaddr_in*)argv + 1);
}
По какой-то причине он не работает должным образом, программа может выполнять последние строки без ошибки сегментации, но когда я получить доступ к членам структур, они полностью изменены
Я полагаю, что 'addr_left',' addr_right' и массив являются локальными переменными функции, которые находятся в стеке. Когда вы возвращаете форму этой функции, эти переменные стека уходят/мусорятся. –
Пробовал ли вы один раз с обычным вызовом функции вместо потоков? Это хорошо работает? – VoidPointer