<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[libxml2 String deallokieren]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein Problem mit dem Deallokieren von Strings. Also ich versuche ein XML-File auszulesen und von einem Knoten die Attribute zu lesen. Dazu gibt es in der libxml2-Bibliothek unter anderem die Funktion xmlTextReaderGetAttributeNo(xmlTextReaderPtr reader, int no), welche mir einen String mit dem &quot;no&quot;-te Attribute des aktuellen Knoten (reader) liefert. Nun steht in der API, dass ich den erhaltenen String deallokieren soll. Nur wie mache ich das? Wenn ich nur die Funktion aufrufe, bekomme ich beim ausführen des Programms an der Stelle des Funktionsaufrufs einen &quot;Memory fault&quot;. Ich benutze den xmlreader zur Verarbeitung des Dokumentes.<br />
<a href="http://xmlsoft.org/html/libxml-xmlreader.html" rel="nofollow">libxml2</a></p>
<p>Ich hoffe mir kann jemand helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/152187/libxml2-string-deallokieren</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 20:49:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152187.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Jul 2006 07:20:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to libxml2 String deallokieren on Tue, 04 Jul 2006 07:21:33 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe ein Problem mit dem Deallokieren von Strings. Also ich versuche ein XML-File auszulesen und von einem Knoten die Attribute zu lesen. Dazu gibt es in der libxml2-Bibliothek unter anderem die Funktion xmlTextReaderGetAttributeNo(xmlTextReaderPtr reader, int no), welche mir einen String mit dem &quot;no&quot;-te Attribute des aktuellen Knoten (reader) liefert. Nun steht in der API, dass ich den erhaltenen String deallokieren soll. Nur wie mache ich das? Wenn ich nur die Funktion aufrufe, bekomme ich beim ausführen des Programms an der Stelle des Funktionsaufrufs einen &quot;Memory fault&quot;. Ich benutze den xmlreader zur Verarbeitung des Dokumentes.<br />
<a href="http://xmlsoft.org/html/libxml-xmlreader.html" rel="nofollow">libxml2</a></p>
<p>Ich hoffe mir kann jemand helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1090993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1090993</guid><dc:creator><![CDATA[Chuqa]]></dc:creator><pubDate>Tue, 04 Jul 2006 07:21:33 GMT</pubDate></item><item><title><![CDATA[Reply to libxml2 String deallokieren on Tue, 04 Jul 2006 09:42:07 GMT]]></title><description><![CDATA[<p>Solche Funktionen sind ja Mist !<br />
Der Kunde sollte nie selber das Aufräumen, was ne Biblitheksfunktion bereitstellt...</p>
<p>Na egal, du musst den Speicher anscheinend wieder freigeben.<br />
Jetzt fragt man sich nur wie der Speicher alloziert wurde.</p>
<p>Entweder mit new[] dann delete[] oder mit malloc und free.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091084</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 04 Jul 2006 09:42:07 GMT</pubDate></item><item><title><![CDATA[Reply to libxml2 String deallokieren on Tue, 04 Jul 2006 09:44:26 GMT]]></title><description><![CDATA[<p>free() ist die Lösung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091086</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 04 Jul 2006 09:44:26 GMT</pubDate></item><item><title><![CDATA[Reply to libxml2 String deallokieren on Tue, 04 Jul 2006 10:14:21 GMT]]></title><description><![CDATA[<p>Danke für deine Hilfe.</p>
<p>Der Memory fault kam, weil ich den Index für den Zugriff auf ein Attribut zu groß gewählt war und damit außerhalb des Bereiches lag.</p>
<p>mfg chuqa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091110</guid><dc:creator><![CDATA[Chuqa]]></dc:creator><pubDate>Tue, 04 Jul 2006 10:14:21 GMT</pubDate></item><item><title><![CDATA[Reply to libxml2 String deallokieren on Tue, 04 Jul 2006 10:39:06 GMT]]></title><description><![CDATA[<p>Aber Freak_Coder hat recht ...</p>
<p>Funktionen die dir speicher allokieren, sollten zumindest nen gegenstueck zum aufraeumen, also ne eigene free funktion anbieten. Da du ja nicht wissen kannst, wie die Bib den speicher allokiert hat (und 25 mal in ne Doku schreiben iss so nen ding)</p>
<p>Standard ist eher, den user selber genug Speicher allokieren lassen und die bib schreibt dir nur auf den speicher ... damit kannst dann selber waehlen wie den speicher anlegst.</p>
<p>Also wenn die lib dir nen free() vorschreibt, wuerd ich designtechnisch die finger von lassen ...</p>
<p>&quot;beruehmte&quot; Ausnahmen sind zum beispiel die QT ... aber da wird es auch bei jeder gelegenheit bemaengelt ^^ (obwohl das an der stelle viele vorteile bringt fuer die QT)</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091123</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Tue, 04 Jul 2006 10:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to libxml2 String deallokieren on Tue, 04 Jul 2006 12:06:27 GMT]]></title><description><![CDATA[<p>Es gibt in verschieden anderen Headerfiles Funktion die allokierten Speicher wieder freigeben, z.B. gibt es in xmlmemory.h eine funktion xmlFreeFunc(void *mem). Als Erklärung steht dazu:</p>
<blockquote>
<p>Signature for a free() implementation.</p>
</blockquote>
<p>Nun habe ich doch noch eine Frage: Sollte nicht beim Aufruf der Variable, nachdem ihr Speicher mit free() freigegeben wurde, ein Fehler kommen, bzw. ihr Inhalt gelöscht also NULL sein?<br />
dazu folgender Code:</p>
<pre><code class="language-cpp">xmlChar *name = xmlTextReaderGetAttributeNo(reader, 0);
cout &lt;&lt; &quot;Name : &quot; &lt;&lt; name &lt;&lt; endl;
free(name);
cout &lt;&lt; &quot;nochmal Name: &quot; &lt;&lt; name &lt;&lt;endl;
</code></pre>
<p>Kompiliere und führe ich das aus so steht nach dem Aufruf der free-Funktion, dasselbe wie davor.</p>
<p>mfg chuqa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091197</guid><dc:creator><![CDATA[Chuqa]]></dc:creator><pubDate>Tue, 04 Jul 2006 12:06:27 GMT</pubDate></item><item><title><![CDATA[Reply to libxml2 String deallokieren on Tue, 04 Jul 2006 12:33:51 GMT]]></title><description><![CDATA[<p>Ich würde hier nicht C++ und C mischen. Es gibt doch bestimmt ein C++ Wrapper dafür.</p>
<p>Da war ja irgendwas auf der Seite, lad dir das runter und benutze es <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Edit: Das mit dem Problem kann ich mir nur so erklären: free() gibt ja den Speicher frei, d.h. aber noch lange nicht das er auch die Speicherstelle löscht bzw. mit irgend etwas anderm füllt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Die Stelle ist jetzt nur nicht mehr reseviert und kann folglich auf von anderen Resourcen benutzt werden ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091212</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 04 Jul 2006 12:33:51 GMT</pubDate></item><item><title><![CDATA[Reply to libxml2 String deallokieren on Tue, 04 Jul 2006 12:49:12 GMT]]></title><description><![CDATA[<p>Nein ! (zu Chuqa)</p>
<p>ein free sagt deinem BS nur, das es den speicher wieder selber nutzen darf, es anderen aufrufern etc zur verfuegung stellen darf .</p>
<p>Nur im debug modus werden so &quot;kranke&quot; sachen gemacht, wie den speicher mit nem muster ueberschreiben um zu checken ob da jemand unitialisiert drauf zugreift etc ...</p>
<p>im release wird da aus gruenden der performance sicher gar nix gemacht, da kann, muss aber nicht, noch stundenlang der alte wert drinnestehen ...</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091219</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Tue, 04 Jul 2006 12:49:12 GMT</pubDate></item><item><title><![CDATA[Reply to libxml2 String deallokieren on Tue, 04 Jul 2006 13:03:54 GMT]]></title><description><![CDATA[<p>Achso, also kann ich davon ausgehen, dass alles in Ordnung ist?!</p>
<p>Den C++-Wrapper würde ich glatt benutzen, nur die Ziel-PCs, auf denen das Programm laufen wird, benutzen die libxml2 und nicht libxml++.</p>
<p>mfg chuqa</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091229</guid><dc:creator><![CDATA[Chuqa]]></dc:creator><pubDate>Tue, 04 Jul 2006 13:03:54 GMT</pubDate></item><item><title><![CDATA[Reply to libxml2 String deallokieren on Tue, 04 Jul 2006 13:08:39 GMT]]></title><description><![CDATA[<p>kenn mich mit libxml2 und so nich aus, aber kann man die libxml++ nicht nachinstallieren ^^<br />
Hat die eigentlich ne eigene .so ... wenn das ne statische lib ist, brauchst dir um die verteilung ja keine sorgen zu machen ^^</p>
<p>wenn dir das zuviel aufwand ist, dann programmier halt mit c schnittstellen, iss halt nich so komfortabel</p>
<p>Ciao ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091233</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Tue, 04 Jul 2006 13:08:39 GMT</pubDate></item><item><title><![CDATA[Reply to libxml2 String deallokieren on Tue, 04 Jul 2006 13:21:14 GMT]]></title><description><![CDATA[<p>Chuqa schrieb:</p>
<blockquote>
<p>Es gibt in verschieden anderen Headerfiles Funktion die allokierten Speicher wieder freigeben, z.B. gibt es in xmlmemory.h eine funktion xmlFreeFunc(void *mem). Als Erklärung steht dazu:</p>
<blockquote>
<p>Signature for a free() implementation.</p>
</blockquote>
</blockquote>
<p>Da würde ich vermutlich diese Funktion zur Freigabe verwenden - wie Freak_Coder sagte, kannst du dir nicht sicher sein, welche Heap-Verwaltung die Lib verwendet; und wenn der Autor irgendwann von malloc()/free() auf new[]/delete[] umsteigt, haut's dir womöglich deine Programme um die Ohren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091238</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 04 Jul 2006 13:21:14 GMT</pubDate></item></channel></rss>