mysql_fetch_lengths, wird jedes mal speicher reserviert?
-
Hallo,
mysql_fetch_lengths() aus der MYSQL-API
liefert einen Zeiger auf einen unsigned long zurück (=> ein Array)jetzt würd's mich interessieren, wie es dabei mit der Speicherverwaltung ausschaut.
wird da bei jeder Anfrage neuer Speicher allokiert oder wird jedesmal
der selbe Speicherbereich verwendet (und evtl. die Größe angepasst?)Hintergrund:
Will erst alles in eine Datenstruktur einlesen.
Jetzt geht's darum, ob ich selber Speicher anforden muss,
um die Inhalte von dem Array zu speichern, oder ob es reicht,
wenn ich mir den Zeiger, den die Funktion zurückgibt, merke...mfg
MartinPS:
zumindest die Adressen ändern sich jedesmal
=> scheinbar wird jedesmal neuer Speicher angefordent,
aber wo wird der dann freigegeben?
ein schönes "delete[]" endet im Nirvana....thx
Martin
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum Datenbanken verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Speicher anfordern und freigene macht die API. Ich frage mich wozu du dies ine ien eigen Struktur speichern willst. fetch_lengths gibt dir lediglich die länge des stings jeder spalte/row zurück.
-
najo,
hab mir eine kleine Wrapper-Klasse geschrieben, weil ich nix anderes zum Laufen
gebracht hab und hätte hald alle Daten, die eine Anfrage zurückliefert,
als verkettete Liste zurückgegeben.Inzwischen hab ich davon allerdings Abstand genommen und übergeb stattdessen einen
Funktionszeiger einer Funktion, die dann für jede Zeile aufgerufen wird...Interessieren würd mich die Sache mit dem Speicher aber nach wie vor.
Aber is ja jetzt beantwortetAuch wenn ich ned recht versteh, wie sich die API drum kümmern soll, dass der Speicher wieder freigegeben wird (woher weiss die API, ab wann ich die Daten nicht
mehr brauch und der Speicher somit freigegeben werden kann?)mfg
Martin
-
Die API reserviert immer Speicher für das aktuelle ROW-SET.
Wenn du die Daten mit store_result abholst sogar für die komplette Ergebnissmenge. Übertragen werden hier die ROWS und die Header-INFO. Daraus berechnet die API dann bestimmte Dinge wie z.B. die max. Zeichenbreite einer Spalte anhand des längsten Eintrags.
Wenn du dir eine eigene Struktur machst dann brauchst du doppelt Speicher.
Ist nicht sinnvoll.