может кто-нибудь объяснить, почему происходит эта ошибка сегментации
В Linux ваш код может иметь переполнение стекового буфера здесь:
strncpy(sock_addr.sa_data, interface, IFNAMSIZ);
при условии IFNAMSIZ = 16
, потому чтоsizeof(sa_data) == 14
.Однако это крайне маловероятно, чтобы вызвать SIGSEGV
в strncpy
- в стеке много других данных.
Гораздо более вероятной причиной сбоя является то, что interface
, который вы прошли, это NULL
.Это должно быть легко увидеть, скомпилировав вашу программу с отладочной информацией (обычно -g
flag) и запустив ее под отладчиком.