我正在读取从udp流捕获的jpg片段,我有以下内容:

#define BUF_SIZ 1066

int main(int argc, char *argv[])
{
    int ptr;
    uint8_t buf[BUF_SIZ];
    uint8_t jpg[BUF_SIZ * 256];

repeat:
    //... Check if first packet

    //... fill buf after finding first packet

    // append buf array to jpg array passing header
    memcpy(&jpg[ptr], &buf[46], numbytes - 46);
    ptr += (numbytes - 46);

    ... check if last packet.

    ... goto repeat if not last packet

ending:
    ... process jpg array

这是可行的,但我认为这是不对的(我是c新手),我偶尔会遇到随机的分段错误。
我在包和包之间做其他事情,所以我需要尽快完成包的捕获

最佳答案

在做memcpy之前要检查的事情:

ptr >= 0
ptr+numbytes < BUF_SIZ * 256
numbytes >= 46
ptr+numbytes > 0

最后一个可能看起来很奇怪,但是可能有numbyets的值在那里失败了,但是满足了其他三个检查(但如果你能证明numbytes远低于INT_MAX,你就不需要tat检查)

08-05 12:59