Пример компилируется, собирается и работает.
Решил поробовать на его основе сделать что-то своё в итоге программа стала падать (abort and undef).
Сначала решил, что в порыве оптимизации что-то сделал не так кривыми руками. Потратив уйму времени на поиск ошибки обнаружил, что указатели на функции передающиеся в процедуру
Код
struct netif *
netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask,
struct ip_addr *gw,
void *state,
err_t (* init)(struct netif *netif),
err_t (* input)(struct pbuf *p, struct netif *netif))
netif_add(struct netif *netif, struct ip_addr *ipaddr, struct ip_addr *netmask,
struct ip_addr *gw,
void *state,
err_t (* init)(struct netif *netif),
err_t (* input)(struct pbuf *p, struct netif *netif))
смещаются на 1 и указывают на нечётные адреса.
вот copy past дебаггера
Код
netif 0x00206704
ipaddr 0x0020176c
netmask 0x00201768
gw 0x00201764
state 0x00000000
init 0x110129 <ethernetif_init+1>
input 0x10be41 <tcpip_input+1>
netifnum 1
ipaddr 0x0020176c
netmask 0x00201768
gw 0x00201764
state 0x00000000
init 0x110129 <ethernetif_init+1>
input 0x10be41 <tcpip_input+1>
netifnum 1
и что самое интересное точно такой же эффект наблюдается в самом примере с сайта. Удивительно то, что после исключительной ситуации программа каким-то чудом продолжает работать дальше и это при том что вектора исключительных ситуаций не определенны.
Кто-нибудь запускал этот пример у себя? Эта бага только у меня воспроизводится или это действительно ошибка в проекте?
З.Ы. компилер gcc 4.1.1