Memory deallocation char buf - c / Qt

OP #3805028
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ß!
Moderator Persönliche Seite
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.
Gast
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 )
OP
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.