<?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[Laufzeitfehler beim zweidimensionalen, dynamischen Array]]></title><description><![CDATA[<p>Ich arbeite an einer DLL und einer GUI die diese aufruft. Nun wollte ich eine dynamisches, zweidimensionales Array erstellen lassen und über die Schnittstelle in die DLL bringen. Allerdings stürzt das Programm beim beenden immer mit einem Laufzeitfehler ab. Der Debugger meint dazu das er hier liegt:</p>
<p><strong>Destruktor der Datenklasse innerhalb der DLL</strong></p>
<pre><code class="language-cpp">CDispData::~CDispData(void)
{
	// belegten Speicherplatz wieder freigeben

	if (m_arrData != NULL)
	{
		// Elemente des dynamischen Arrays und danach das Array selbst löschen
		for (int i=0; i &lt; m_iRows; i++) 
			delete [] m_arrData[i] ;    // &lt;--- hier ist der Fehler
		delete [] m_arrData; 
	}

}	// ~CDispData::~CDispData();
</code></pre>
<p>Ich dachte erst das eventuell i zu weit läuft, aber bei einem Haltepunkt direkt davor stimmt der Wert von m_iRows.</p>
<p>Hier erstmal der &quot;Verlauf&quot; den das Array nimmt...</p>
<p><strong>anlegen innerhalb der GUI</strong></p>
<pre><code class="language-cpp">iRows = 10;
iColumns = 5;
// das zweidimensinale Array anlegen
m_arrData = new float*[iRows];			// dynamische Array von Zeigern anlegen
for (int i=0; i &lt; iRows; i++)			// an jeden Zeiger ein Array hängen 
m_arrData[i] = new float[iColumns]; 
// Array übergeben
PassData(m_arrData, iRows, iColumns);
</code></pre>
<p><strong>Weiterleitung an der Schnittstelle zur DLL</strong></p>
<pre><code class="language-cpp">__declspec(dllexport) bool PassData(float **arrMatrix, int iRows, int iColumns)
{
	if(g_pDispData-&gt;InitDataMatrix(arrMatrix, iRows, iColumns) == false)
		return false;

	return true;
}	// ~PassData();
</code></pre>
<p><strong>Sicherung innerhalb der Datenklasse der DLL</strong></p>
<pre><code class="language-cpp">bool CDispData::InitDataMatrix(float **arrMatrix, int iRows, int iColumns)
{
	// das zweidimensinale Array anlegen
	m_arrData = new float*[iRows];			// dynamische Array von Zeigern anlegen
	for (int i=0; i &lt; iRows; i++)			// an jeden Zeiger ein Array hängen 
		m_arrData[i] = new float[iColumns]; 

	// Werte übernehmen
	m_arrData	= arrMatrix;
	m_iRows		= iRows;
	m_iColumns	= iColumns;

	return true;
}	// ~CDispData::InitDataMatrix();
</code></pre>
<p>könnte mir eventuell jemand dabei weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/177660/laufzeitfehler-beim-zweidimensionalen-dynamischen-array</link><generator>RSS for Node</generator><lastBuildDate>Sun, 20 Sep 2026 04:22:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/177660.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 02 Apr 2007 16:05:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Laufzeitfehler beim zweidimensionalen, dynamischen Array on Mon, 02 Apr 2007 16:05:15 GMT]]></title><description><![CDATA[<p>Ich arbeite an einer DLL und einer GUI die diese aufruft. Nun wollte ich eine dynamisches, zweidimensionales Array erstellen lassen und über die Schnittstelle in die DLL bringen. Allerdings stürzt das Programm beim beenden immer mit einem Laufzeitfehler ab. Der Debugger meint dazu das er hier liegt:</p>
<p><strong>Destruktor der Datenklasse innerhalb der DLL</strong></p>
<pre><code class="language-cpp">CDispData::~CDispData(void)
{
	// belegten Speicherplatz wieder freigeben

	if (m_arrData != NULL)
	{
		// Elemente des dynamischen Arrays und danach das Array selbst löschen
		for (int i=0; i &lt; m_iRows; i++) 
			delete [] m_arrData[i] ;    // &lt;--- hier ist der Fehler
		delete [] m_arrData; 
	}

}	// ~CDispData::~CDispData();
</code></pre>
<p>Ich dachte erst das eventuell i zu weit läuft, aber bei einem Haltepunkt direkt davor stimmt der Wert von m_iRows.</p>
<p>Hier erstmal der &quot;Verlauf&quot; den das Array nimmt...</p>
<p><strong>anlegen innerhalb der GUI</strong></p>
<pre><code class="language-cpp">iRows = 10;
iColumns = 5;
// das zweidimensinale Array anlegen
m_arrData = new float*[iRows];			// dynamische Array von Zeigern anlegen
for (int i=0; i &lt; iRows; i++)			// an jeden Zeiger ein Array hängen 
m_arrData[i] = new float[iColumns]; 
// Array übergeben
PassData(m_arrData, iRows, iColumns);
</code></pre>
<p><strong>Weiterleitung an der Schnittstelle zur DLL</strong></p>
<pre><code class="language-cpp">__declspec(dllexport) bool PassData(float **arrMatrix, int iRows, int iColumns)
{
	if(g_pDispData-&gt;InitDataMatrix(arrMatrix, iRows, iColumns) == false)
		return false;

	return true;
}	// ~PassData();
</code></pre>
<p><strong>Sicherung innerhalb der Datenklasse der DLL</strong></p>
<pre><code class="language-cpp">bool CDispData::InitDataMatrix(float **arrMatrix, int iRows, int iColumns)
{
	// das zweidimensinale Array anlegen
	m_arrData = new float*[iRows];			// dynamische Array von Zeigern anlegen
	for (int i=0; i &lt; iRows; i++)			// an jeden Zeiger ein Array hängen 
		m_arrData[i] = new float[iColumns]; 

	// Werte übernehmen
	m_arrData	= arrMatrix;
	m_iRows		= iRows;
	m_iColumns	= iColumns;

	return true;
}	// ~CDispData::InitDataMatrix();
</code></pre>
<p>könnte mir eventuell jemand dabei weiterhelfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258089</guid><dc:creator><![CDATA[kokunze]]></dc:creator><pubDate>Mon, 02 Apr 2007 16:05:15 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitfehler beim zweidimensionalen, dynamischen Array on Mon, 02 Apr 2007 16:20:31 GMT]]></title><description><![CDATA[<p>Vielleicht solltest du den Inhalt des Arrays elementweise übernehmen. Deine Methode InitDataMatrix() legt erst genug Speicher an, dann vergisst sie diesen Speicherblock und biegt m_arrData um auf den von der GUI angelegten Speicherblock (abgesehen vom double free, wenn die GUI diesen Speicher wieder freigibt, haben DLLs häufig ihre eigene Heapverwaltung, die nicht unbedingt mit fremdem Speicher zurechtkommt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258099</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258099</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 02 Apr 2007 16:20:31 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitfehler beim zweidimensionalen, dynamischen Array on Mon, 02 Apr 2007 16:36:16 GMT]]></title><description><![CDATA[<p>hm, naja als Notlösung hat ich das auch schon in betracht gezogen, aber am liebsten wär mir halt ne einfache Übergabe gewesen. Aber in Anbetracht meiner Empfindlichkeit gegenüber Laufzeitfehlern (lacht) ist das wohl das beste und einfachste die Array-Daten einzeln zu übergeben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258114</guid><dc:creator><![CDATA[kokunze]]></dc:creator><pubDate>Mon, 02 Apr 2007 16:36:16 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitfehler beim zweidimensionalen, dynamischen Array on Mon, 02 Apr 2007 16:42:54 GMT]]></title><description><![CDATA[<p>Wenn du dir den ganzen Ärger mit new/delete ersparen willst, lass dir doch von deinem Compiler unter die Arme greifen. Der ANSI-C++ Standard hat nicht umsonst so nette Containerklassen wie vector&lt;&gt; oder deque&lt;&gt; definiert <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/1258120</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258120</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 02 Apr 2007 16:42:54 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitfehler beim zweidimensionalen, dynamischen Array on Mon, 02 Apr 2007 18:25:14 GMT]]></title><description><![CDATA[<p>hmm... wenn ich die Probleme nicht loswerde, werd ich mir das auch mal anschauen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258139</guid><dc:creator><![CDATA[kokunze]]></dc:creator><pubDate>Mon, 02 Apr 2007 18:25:14 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitfehler beim zweidimensionalen, dynamischen Array on Tue, 03 Apr 2007 09:57:23 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Wenn du dir den ganzen Ärger mit new/delete ersparen willst, lass dir doch von deinem Compiler unter die Arme greifen. Der ANSI-C++ Standard hat nicht umsonst so nette Containerklassen wie vector&lt;&gt; oder deque&lt;&gt; definiert <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>
</blockquote>
<p>Ein besseres Argument als</p>
<blockquote>
<p>Laufzeitfehler beim zweidimensionalen, dynamischen Array</p>
</blockquote>
<p>gibt es eigentlich nicht für die Verwendung der Containerklassen...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258418</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 03 Apr 2007 09:57:23 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitfehler beim zweidimensionalen, dynamischen Array on Tue, 03 Apr 2007 11:16:15 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Ein besseres Argument als</p>
<blockquote>
<p>Laufzeitfehler beim zweidimensionalen, dynamischen Array</p>
</blockquote>
<p>gibt es eigentlich nicht für die Verwendung der Containerklassen...</p>
<p>Gruß,</p>
<p>Simon2.</p>
</blockquote>
<p>Das lässt sich auch ohne Containerklassen fehlerfrei programmieren.<br />
Leichter wirds schon, wenn er sein zweidimensionales Array eindimensional abbildet (jeweils nur 1 Aufruf von new und delete[] - statt der vielen.)</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258464</guid><dc:creator><![CDATA[Bratwurst 2]]></dc:creator><pubDate>Tue, 03 Apr 2007 11:16:15 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitfehler beim zweidimensionalen, dynamischen Array on Tue, 03 Apr 2007 11:19:48 GMT]]></title><description><![CDATA[<p>Ja klar, du kannst das Rad gerne neu erfinden <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="😉"
    /> Aber warum sich die Mühe machen und etwa zwei Dutzend potentielle Fehlerquellen dabei erkennen und umschiffen, wenn schon andere Leute funktionierende Klassen für diesen Zweck entwickelt haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1258471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1258471</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 03 Apr 2007 11:19:48 GMT</pubDate></item><item><title><![CDATA[Reply to Laufzeitfehler beim zweidimensionalen, dynamischen Array on Wed, 04 Apr 2007 16:05:40 GMT]]></title><description><![CDATA[<p>Bratwurst 2 schrieb:</p>
<blockquote>
<p>...<br />
Das lässt sich auch ohne Containerklassen fehlerfrei programmieren...</p>
</blockquote>
<p>Habe auch nie Gegenteiliges behauptet !<br />
(Übrigens lässt sich eine GUI auch in ASM programmieren)<br />
Aus dieser Feststellung folgt aber noch nicht, dass es eine gute Idee oder die beste mögliche Lösung sei.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1259369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1259369</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 04 Apr 2007 16:05:40 GMT</pubDate></item></channel></rss>