0

ある関数でクラスへのポインターを宣言し、このポインターをパラメーターとして別の関数を呼び出そうとしています。クラスを作成し、この新しく作成されたクラスへのポインターを入力ポインターに割り当てようとする別の関数。

最初の方法:

size_t packetLen = 0;
ETH2::PacketEthernetII* eth = NULL; 
IPv4::PacketIPv4* ip4 = NULL;   
ICMP::PacketICMP* icmp = NULL;
TCP::PacketTCP* tcp = NULL;
UDP::PacketUDP* udp = NULL;
if (!buildPackets(formats, packetLen, eth, ip4, icmp, tcp, udp)) {}

別の方法:

    bool Device::buildPackets(const Tokens& formats, size_t& packetLen, 
        ETH2::PacketEthernetII* eth, IPv4::PacketIPv4* ip4, 
        ICMP::PacketICMP* icmp, TCP::PacketTCP* tcp, UDP::PacketUDP* udp)
    {
        for (size_t i = 0; i < formats.size(); ++i) {       
                if (Utilities::startsWith(formats[i], ETH2PROTO)) {             
                    eth = createEthernet2(formats[i]);          
                    if (!eth) 
                        return false;           
                    packetLen += eth->len();            
                }
        }   
        return true;
}

2番目のメソッドは機能しており、ethはオブジェクトに価値をもたらします。しかし、最初のメソッドに戻った後、ethはnullになります...そして理由はわかりません。私が見逃したポインターについての重要な詳細は何ですか?

4

1 に答える 1

1

参照による呼び出し:

bool Device::buildPackets(const Tokens& formats, size_t& packetLen, 
    ETH2::PacketEthernetII* &eth, IPv4::PacketIPv4* ip4, 
    ICMP::PacketICMP* icmp, TCP::PacketTCP* tcp, UDP::PacketUDP* udp)
于 2012-11-08T21:19:52.007 に答える