<?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[Speicher freigeben]]></title><description><![CDATA[<p>Servus,<br />
ich habe hier ein Simulationsprogramm, welches ich mit Hilfe von C++ erweitern kann. Diese Schnittstelle stellt mir verschiedene Funktionen zur Verfügung. Eine ist das Speichern von Daten in einem struct</p>
<pre><code class="language-cpp">///////////////////////////////////////////////////////////
	// Allocate User Memory
	struct UD {
		double pEswIGBT[E_VECTOR];
	};
	UD *pData = (UD*)pMod-&gt;AllocateUserDataMemory( sizeof( UD ) );
	pMod-&gt;SetUserData( pData, sizeof( UD ) );

	///////////////////////////////////////////////////////////
	// Init Vektor Werte
	Esw_Vektor(pMod);
</code></pre>
<p>E_VECTOR ist eine Konstante, mit pMod-&gt;SetUserData wird Speicher reserviert. Mit Esw_Vektor werden lediglich Werte in pEswIGBT geschrieben. Das funktioniert, hab ich schon ausprobiert.</p>
<pre><code class="language-cpp">struct UD {
		double pEswIGBT[E_VECTOR];
	};
	long UDsize;

	UD *pData = (UD*)pMod-&gt;GetUserData( &amp;UDsize );
</code></pre>
<p>Mit GetUserData kann man sich den Zeiger auf den zuvor festgelegten Speicher wieder holen. Jetzt kommt die Frage:</p>
<p>Wenn ich mit GetUserData einen Zeiger hole, dann muss ich den am Ende der Funktion wieder freigeben. Wenn ich das nicht mache, explodiert irgendwann der Speicher und das Programm bricht ab. Wenn ich das mache, dann scheint es, als ob bei jedem Schritt (Simulationsprogramm) Teile des Speichers überschrieben werden.</p>
<p>Wie kann man das richtig machen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219230/speicher-freigeben</link><generator>RSS for Node</generator><lastBuildDate>Thu, 08 Oct 2026 08:53:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219230.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 31 Jul 2008 06:47:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicher freigeben on Thu, 31 Jul 2008 06:47:37 GMT]]></title><description><![CDATA[<p>Servus,<br />
ich habe hier ein Simulationsprogramm, welches ich mit Hilfe von C++ erweitern kann. Diese Schnittstelle stellt mir verschiedene Funktionen zur Verfügung. Eine ist das Speichern von Daten in einem struct</p>
<pre><code class="language-cpp">///////////////////////////////////////////////////////////
	// Allocate User Memory
	struct UD {
		double pEswIGBT[E_VECTOR];
	};
	UD *pData = (UD*)pMod-&gt;AllocateUserDataMemory( sizeof( UD ) );
	pMod-&gt;SetUserData( pData, sizeof( UD ) );

	///////////////////////////////////////////////////////////
	// Init Vektor Werte
	Esw_Vektor(pMod);
</code></pre>
<p>E_VECTOR ist eine Konstante, mit pMod-&gt;SetUserData wird Speicher reserviert. Mit Esw_Vektor werden lediglich Werte in pEswIGBT geschrieben. Das funktioniert, hab ich schon ausprobiert.</p>
<pre><code class="language-cpp">struct UD {
		double pEswIGBT[E_VECTOR];
	};
	long UDsize;

	UD *pData = (UD*)pMod-&gt;GetUserData( &amp;UDsize );
</code></pre>
<p>Mit GetUserData kann man sich den Zeiger auf den zuvor festgelegten Speicher wieder holen. Jetzt kommt die Frage:</p>
<p>Wenn ich mit GetUserData einen Zeiger hole, dann muss ich den am Ende der Funktion wieder freigeben. Wenn ich das nicht mache, explodiert irgendwann der Speicher und das Programm bricht ab. Wenn ich das mache, dann scheint es, als ob bei jedem Schritt (Simulationsprogramm) Teile des Speichers überschrieben werden.</p>
<p>Wie kann man das richtig machen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556774</guid><dc:creator><![CDATA[etsmart]]></dc:creator><pubDate>Thu, 31 Jul 2008 06:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher freigeben on Thu, 31 Jul 2008 06:54:30 GMT]]></title><description><![CDATA[<p>Naja wenn die Schnittstelle Funktionen zur Verfügung stellt um Speicher zu allokieren sollte sie eigentlich auch Funktionen besitzen, die den Speicher wieder freigeben.<br />
Desweiteren kann man die Allocate-Funktion und die SetUserData-Funktion eigentlich auch in einem Stück realisieren, aber vermutlich hast du die Funktionen so vorgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556776</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Thu, 31 Jul 2008 06:54:30 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher freigeben on Thu, 31 Jul 2008 07:04:11 GMT]]></title><description><![CDATA[<p>Das läuft in einer DLL. Deshalb muss man bei jedem Funktionsaufruf erstmal den Zeiger auf die Daten holen.</p>
<p>Diese Daten sollen erhalten bleiben, aber irgendwas frisst mir den Speicher auf. Und das ... so scheint es ... ist GetUserData.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556779</guid><dc:creator><![CDATA[etsmart]]></dc:creator><pubDate>Thu, 31 Jul 2008 07:04:11 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher freigeben on Thu, 31 Jul 2008 07:11:26 GMT]]></title><description><![CDATA[<p>Musst du UDsize selber setzen, oder tut das GetUserData für dich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556782</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Thu, 31 Jul 2008 07:11:26 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher freigeben on Thu, 31 Jul 2008 07:20:03 GMT]]></title><description><![CDATA[<p>It0101 schrieb:</p>
<blockquote>
<p>Musst du UDsize selber setzen, oder tut das GetUserData für dich?</p>
</blockquote>
<p>Mich stutzt auch ein wenig das er an der Stelle einen Pointer übergibt. Wenn dieser Pointerwert als Size gewählt wird, dann gute Nacht. <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/1556788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556788</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 31 Jul 2008 07:20:03 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher freigeben on Thu, 31 Jul 2008 07:33:38 GMT]]></title><description><![CDATA[<p>UDsize wird von GetUserData gesetzt, deshalb wird das als Zeiger übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1556789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1556789</guid><dc:creator><![CDATA[etsmart]]></dc:creator><pubDate>Thu, 31 Jul 2008 07:33:38 GMT</pubDate></item></channel></rss>