C代码中的指针赋值问题

时间:2017-01-31 21:38:32

标签: pointers networking null malloc assign

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命令对其进行初始化。当我将它分配给声明为struct route *rttable[RT_TSIZE];的数组rttable时,srt指针变为NULL。可能是什么导致了这个?

我网络课程中为项目所做的代码是基于Douglas Comer的TCP / IP第二卷书:

https://www.amazon.com/Internetworking-TCP-Vol-Implementation-Internals/dp/0139738436

1 个答案:

答案 0 :(得分:1)

malloc现在是一个内存泄漏,因为你实际上并没有使用那个分配的内存地址。在for循环中,通过将src指针指向rttable [hv],将src指针重新分配给内存中的其他位置。所以,如果你检查了rttable [hv],你很可能会发现它的值被设置为0或者为空。