<?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[objekt dynamisch in dll erzeugt, aber wo löschen??]]></title><description><![CDATA[<p>hallo,</p>
<pre><code class="language-cpp">__declspec(dllexport)int* test()
{
int* x;
*x = 10;
return x;
}
</code></pre>
<p>meine frage lautet, wo muss der speicher jetzt gelöscht werden??<br />
im hauptprogramm?</p>
<pre><code class="language-cpp">int* myx = test();
delete myx;
</code></pre>
<p>oder irgendwo in der dll?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/163127/objekt-dynamisch-in-dll-erzeugt-aber-wo-löschen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 22:37:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/163127.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Oct 2006 09:16:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to objekt dynamisch in dll erzeugt, aber wo löschen?? on Thu, 26 Oct 2006 09:16:29 GMT]]></title><description><![CDATA[<p>hallo,</p>
<pre><code class="language-cpp">__declspec(dllexport)int* test()
{
int* x;
*x = 10;
return x;
}
</code></pre>
<p>meine frage lautet, wo muss der speicher jetzt gelöscht werden??<br />
im hauptprogramm?</p>
<pre><code class="language-cpp">int* myx = test();
delete myx;
</code></pre>
<p>oder irgendwo in der dll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161726</guid><dc:creator><![CDATA[dsfdsfdsf]]></dc:creator><pubDate>Thu, 26 Oct 2006 09:16:29 GMT</pubDate></item><item><title><![CDATA[Reply to objekt dynamisch in dll erzeugt, aber wo löschen?? on Thu, 26 Oct 2006 09:27:36 GMT]]></title><description><![CDATA[<p>Verwenden die DLL und das Hauptprogramm den gleichen Heap, dann kannst du dir das aussuchen. Das ist z.B. der Fall wenn du für beide MSVC verwendest und die selbe Version der &quot;DLL Runtime&quot; (Version der Runtime: MSVC Version + Debug/Release Unterschied).</p>
<p>Wenn du nicht sicherstellen kannst dass der gleiche Heap verwendet wird musst du das was in der DLL angefordert wird auch in der DLL wieder freigeben, und was in der EXE angefordert wird auch in der EXE wieder freigeben. In dem Fall bekommst du aber wahrscheinlich noch zusätzliche Probleme, da oft &amp; gerne Speicher von irgendwelchen STL Klassen intern angeforder und freigegeben wird. Eine Funktion die einen std::string als Returnwert hat ist z.B. schonmal verboten in so einem Fall. Und das betrifft natürlich nicht nur die STL sondern auch einen Haufen andere Libraries.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161743</guid><dc:creator><![CDATA[Plotzenhotz]]></dc:creator><pubDate>Thu, 26 Oct 2006 09:27:36 GMT</pubDate></item><item><title><![CDATA[Reply to objekt dynamisch in dll erzeugt, aber wo löschen?? on Thu, 26 Oct 2006 09:35:51 GMT]]></title><description><![CDATA[<p>Zuerst ein Hinweis: Deine Funktion erstellt keine neue Integer-Variable, da Du mit</p>
<pre><code class="language-cpp">int* x;
</code></pre>
<p>einen Zeiger erstellst, der auf einen undefinierten Speicherbereich zeigt. Und dem Wert an diesem undefinierten Speicherbereich weist Du jetzt mit</p>
<pre><code class="language-cpp">*x = 10;
</code></pre>
<p>den Wert 10 zu, was undefiniertes Verhalten zur Folge hat. Richtig ist es so:</p>
<pre><code class="language-cpp">int* x = new int;
*x = 10;
</code></pre>
<p>Nun zu Deiner Frage: Klar, man könnte das ganze im Hauptprogramm löschen. (Edit: Ob das mit DLL-Dateien funktioniert, weiß ich leider nicht.) Aber da der Nutzer normalerweise nicht weiß, was genau in der Funktion steht und ob da etwas mit new erstellt wird, würde ich eine analoge Lösch-Funktion schreiben. So zum Beispiel:</p>
<pre><code class="language-cpp">int *CreateIntPointer ()
{
    int *x=new int;

    *x=10;

    return x;
}

void DeleteIntPointer (int *pointer)
{
    delete pointer;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1161755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161755</guid><dc:creator><![CDATA[NES-Spieler]]></dc:creator><pubDate>Thu, 26 Oct 2006 09:35:51 GMT</pubDate></item><item><title><![CDATA[Reply to objekt dynamisch in dll erzeugt, aber wo löschen?? on Thu, 26 Oct 2006 10:04:11 GMT]]></title><description><![CDATA[<p>diese analoge löschfunktion in der dll schreiben, aber wo aufrufen?<br />
in der dll geht das ja nicht, also auch im aufrufenden programm selbst??</p>
<p>also so</p>
<pre><code class="language-cpp">int* myx = test();
DeleteIntPointer(myx);
</code></pre>
<p>oder wo soll ich diese aufrufen??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161772</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161772</guid><dc:creator><![CDATA[dsfdsfdsf]]></dc:creator><pubDate>Thu, 26 Oct 2006 10:04:11 GMT</pubDate></item><item><title><![CDATA[Reply to objekt dynamisch in dll erzeugt, aber wo löschen?? on Thu, 26 Oct 2006 10:27:04 GMT]]></title><description><![CDATA[<p>@dsfdsfdsf:</p>
<blockquote>
<pre><code class="language-cpp">int* myx = test();
DeleteIntPointer(myx);
</code></pre>
</blockquote>
<p>Genau.<br />
Wenn sowohl 'test' als auch 'DeleteIntPointer' in ein-und-der-selben DLL implementiert sind dann passt das so. Von wo aus 'test' und 'DeleteIntPointer' aufgerufen werden spielt keine Rolle.</p>
<p>Natürlich darf keine der beiden Funktionen dann inline implementiert sein, hoffe das ist klar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1161790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1161790</guid><dc:creator><![CDATA[Plotzenhotz]]></dc:creator><pubDate>Thu, 26 Oct 2006 10:27:04 GMT</pubDate></item></channel></rss>