Hallihallo,
ich bin mir hier bei ner total trivialen Sache völlig unsicher:
Ich benutzt eine fremde C Bibliothek (pcap) in einem C++ Programm (Qt).
Dort gibt es folgende Funktion:
1 | int pcap_next_ex ( pcap_t * p,
|
2 | struct pcap_pkthdr ** pkt_header,
|
3 | const u_char ** pkt_data
|
4 | )
|
Jetzt übergebe ich der Funktion einen Pointer den ich vorher anlege:
Jetzt die frage:
Wie funktioniert in dem Fall die Speicher Zuweisung -> kurz gesagt, muss
ich den Buffer nach Benutzung wieder löschen?
In dem speziellen Fall beziehe ich mich auf folgendes Beispiel:
1 | int main()
|
2 | {
|
3 | pcap_if_t *alldevs;
|
4 | pcap_if_t *d;
|
5 | int inum;
|
6 | int i=0;
|
7 | pcap_t *adhandle;
|
8 | int res;
|
9 | char errbuf[PCAP_ERRBUF_SIZE];
|
10 | struct tm ltime;
|
11 | char timestr[16];
|
12 | struct pcap_pkthdr *header;
|
13 | const u_char *pkt_data;
|
14 | time_t local_tv_sec;
|
15 |
|
16 |
|
17 | //...
|
18 |
|
19 |
|
20 | /* Retrieve the packets */
|
21 | while((res = pcap_next_ex( adhandle, &header, &pkt_data)) >= 0){
|
22 |
|
23 | if(res == 0)
|
24 | /* Timeout elapsed */
|
25 | continue;
|
26 |
|
27 | /* convert the timestamp to readable format */
|
28 | local_tv_sec = header->ts.tv_sec;
|
29 | localtime_s(<ime, &local_tv_sec);
|
30 | strftime( timestr, sizeof timestr, "%H:%M:%S", <ime);
|
31 |
|
32 | printf("%s,%.6d len:%d\n", timestr, header->ts.tv_usec, header->len);
|
33 | }
|
34 |
|
35 | if(res == -1){
|
36 | printf("Error reading the packets: %s\n", pcap_geterr(adhandle));
|
37 | return -1;
|
38 | }
|
39 |
|
40 | return 0;
|
41 | }
|
Hier mal am Beispiel vom "struct ... *header":
Am Anfang lege ich ja nur einen Zeiger an, dieser wird dann durch die
Funktion pcap_next_ex aufgefüllt.
Wenn ich nun das Ende der Funktion erreiche, dann wird doch nur der
Zeiger automatisch gelöscht. Müsste ich nicht das Object explizit aus
dem Speicher löschen?