Hallo! Eine kleine Verständnisfrage habe ich: Ich nutze eine C-Bibliothek in QT, ich muss von dieser Bibliothek mehrere Funktionen implementieren, also die Bibilothek hat die Funktionen Deklariert und ich muss sie Implementieren. Dabei steht im Header folgender Satz im Kommentar über der Funktion: The memory allocation and deallocation for the buffer is handled by the callee. Die Funktion bekommt mehrere parameter, davon ist eine "const char* buf", worauf sich wohl der Satz bezieht (die anderen sind alle keine Pointer und werden ja somit eh am Ende der Funktion gelöscht). Innerhalb der Funktion gebe ich den Buffer an QUdpSocket::writeDatagram(char* buf, qint64 len, ...) weiter. Muss ich den Buffer jetzt noch explizit löschen? Wie? Woher weiß ich ob Qt (writeDatagram) den Buffer löscht? Danke und Gruß!
Rentner Opa schrieb: > The memory allocation and > deallocation for the buffer is handled by the callee. > > Die Funktion bekommt mehrere parameter, davon ist eine "const char* > buf", worauf sich wohl der Satz bezieht Nein, das passt nicht zusammen. Wenn du einen Zeiger auf konstante Daten hast, dann kann das nichts sein, was im Aufgerufenen (“callee”) alloziert oder dealloziert wird. Schätzungsweise soll das wohl bedeuten, dass du dich um Speicher innerhalb deiner Bibliotheksfunktionen selbst kümmern musst.
Jörg Wunsch schrieb: > Nein, das passt nicht zusammen. Wenn du einen Zeiger auf konstante > Daten hast, dann kann das nichts sein, was im Aufgerufenen > (“callee”) alloziert oder dealloziert wird. Ich gebe dir da recht, ... > Schätzungsweise soll das wohl bedeuten, dass du dich um Speicher > innerhalb deiner Bibliotheksfunktionen selbst kümmern musst. ... allerdings wäre es auch etwas ungewöhnlich, das explizit zu dokumentieren. Daß eine Funktion sich um alles kümmern muß, das sie komplett intern macht, ist ja irgendwie logisch. Interessant wird's ja erst bei Daten, die rein oder raus gegeben werden.
Rolf Magnus schrieb: > Jörg Wunsch schrieb: >> Nein, das passt nicht zusammen. Wenn du einen Zeiger auf konstante >> Daten hast, dann kann das nichts sein, was im Aufgerufenen >> (“callee”) alloziert oder dealloziert wird. > > Ich gebe dir da recht, ... > >> Schätzungsweise soll das wohl bedeuten, dass du dich um Speicher >> innerhalb deiner Bibliotheksfunktionen selbst kümmern musst. > > ... allerdings wäre es auch etwas ungewöhnlich, das explizit zu > dokumentieren. Kommt drauf an. So etwas > Dabei steht im Header folgender Satz im Kommentar über der Funktion: ist im Header File ja normalerweise die Information an den Verwender der Funktion/Funktionen und weniger ein Hinweis an den, der die Funktion implementiert. Kommt drauf an, was die restlichen Funktionen so machen. Manchmal findet man auch Interfaces, in denen der Aufrufer einen Buffer bereitstellen soll und/oder spezielle Allokier oder Deallokierfunktionen aufrufen muss. In dem Fall wäre das dann der Hinweis auf den Verwender: Mach dir keine Sorgen, du brauchst dich da um nichts kümmern. Ist aber nur meine Interpretation. Vielleicht ist das aber auch einfach nur ein "Standardsatz", der vom Auftraggeber standardmässig eingefügt wird ohne dass er darüber nachgedacht hat, ob das jetzt Sinn macht oder nicht.
Ich kenne mich mit Qt nicht aus, aber in den Beispielen, die ich gesehen habe, wird eigentlich immer eine lokale Instanz von QByteArray verwendet. QByteArray buf; ... socket->writeDatagram(buf, ...); Dafür gibt es doch extra
1 | writeDatagram ( const QByteArray & datagram, const QHostAddress & host, quint16 port ) |
Es gibt diverse Versionen von QUdpSocket::writeDatagram, einige nehmen QByteArray, andere direkt einen buffer. Danke soweit, ich werde mich euch anschließen und erstmal nichts weiter unternehmen und bei langzeittests dann mal auf die Speicherauslastung achten.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.