int rtadd(IPaddr net, IPaddr mask, IPaddr gw, unsigned metric)
{
struct route *prt, *srt, *prev;
srt= malloc(sizeof(struct route));
bool isdup;
int hv = 0, i = 0;
if (!Route.ri_valid)
rtinit();
prt = rtnew(net, mask, gw, metric);
prt->rt_key = 0;
for (i - 0; i < 32; ++i)
prt->rt_key += (mask >> i) & 1;
prev = NULL;
hv = rthash(net);
isdup = false;
for (srt = rttable[hv]; srt; srt = srt->rt_next) //trouble point (issue with srt = rttable[hv])?
{
if (prt->rt_key > srt->rt_key)
{
break;
}
if (srt->rt_net == prt->rt_net && srt->rt_mask == prt->rt_mask)
{
isdup = true;
break;
}
prev = srt;
}
return 0;
}
В приведенном выше коде я создал указатель srt
и использовал команду malloc
для его инициализации. Когда я назначаю его массиву rttable, который объявлен как struct route *rttable[RT_TSIZE];
, указатель srt
становится NULL. Что может быть причиной этого?Указатель Назначение Выпуск в C код
Код, который делается для проекта в моем сетевом классе базируется на TCP/IP тома II книге Дугласа встречному в:
https://www.amazon.com/Internetworking-TCP-Vol-Implementation-Internals/dp/0139738436
'srt-> rt_next' (который присваивается' srt') в конечном итоге становится нулевым, возможно. – rom1v
См. Также я думал об этом, кроме как после тестирования, указатель 'srt' становится NULL после прямого присвоения ему' rttable [hv] ' – Wakester
Тогда' rttable [hv] 'is null ... – rom1v