<?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[Dynamische Speicherverwaltung]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>habe ein kleines Problem mit der dynamischen Verwaltung von Speicherbereichen und hoffe mich kann einer von euch aufklären was ich falsch mache.<br />
Hier erstmal mein Code:</p>
<pre><code class="language-cpp">typedef unsigned int uint;

uint **triangle;

for (uint i = 0; i &lt; 15; ++i) {
	cout &lt;&lt; &quot;Allocating &quot; &lt;&lt; (i + 1) * sizeof(uint *) &lt;&lt; &quot; Bytes of memory for uint-pointers&quot; &lt;&lt; endl;
	triangle = (uint **)realloc(triangle, (i + 1) * sizeof(uint *));

	if (triangle != NULL) {
		cout &lt;&lt; &quot;Allocating &quot; &lt;&lt; (i + 1) * sizeof(uint) &lt;&lt; &quot; Bytes of memory for uint values&quot; &lt;&lt; endl;
		triangle[i] = (uint *)malloc((i + 1) * sizeof(uint));

		if (triangle[i] != NULL) {
			cout &lt;&lt; &quot;Filling uint values&quot; &lt;&lt; endl;
			for (uint j = 0; j &lt;= i; ++j) {
				triangle[i][j] = 12321;

				cout &lt;&lt; triangle[i][j] &lt;&lt; endl;
			}
		}
	}
}
</code></pre>
<p>Ich versuche ein Dreieck aus uint-Werten zu erstellen, was in etwa so aussieht:</p>
<pre><code class="language-cpp">uint dreieck[zeilen][spalten] = {
	{77},
	{55, 66},
	{44, 33, 22}
};
</code></pre>
<p>Leider beendet sich die Anwendung mit einem Laufzeitfehler, sobald ich Speicher für die Spalte reservieren will, also bei:</p>
<pre><code class="language-cpp">triangle[i] = (uint *)malloc((i + 1) * sizeof(uint));
</code></pre>
<p>Kann mir bitte jemand sagen, wie das richtig geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/302606/dynamische-speicherverwaltung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 06:50:06 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302606.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Apr 2012 06:21:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dynamische Speicherverwaltung on Mon, 23 Apr 2012 06:21:18 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>habe ein kleines Problem mit der dynamischen Verwaltung von Speicherbereichen und hoffe mich kann einer von euch aufklären was ich falsch mache.<br />
Hier erstmal mein Code:</p>
<pre><code class="language-cpp">typedef unsigned int uint;

uint **triangle;

for (uint i = 0; i &lt; 15; ++i) {
	cout &lt;&lt; &quot;Allocating &quot; &lt;&lt; (i + 1) * sizeof(uint *) &lt;&lt; &quot; Bytes of memory for uint-pointers&quot; &lt;&lt; endl;
	triangle = (uint **)realloc(triangle, (i + 1) * sizeof(uint *));

	if (triangle != NULL) {
		cout &lt;&lt; &quot;Allocating &quot; &lt;&lt; (i + 1) * sizeof(uint) &lt;&lt; &quot; Bytes of memory for uint values&quot; &lt;&lt; endl;
		triangle[i] = (uint *)malloc((i + 1) * sizeof(uint));

		if (triangle[i] != NULL) {
			cout &lt;&lt; &quot;Filling uint values&quot; &lt;&lt; endl;
			for (uint j = 0; j &lt;= i; ++j) {
				triangle[i][j] = 12321;

				cout &lt;&lt; triangle[i][j] &lt;&lt; endl;
			}
		}
	}
}
</code></pre>
<p>Ich versuche ein Dreieck aus uint-Werten zu erstellen, was in etwa so aussieht:</p>
<pre><code class="language-cpp">uint dreieck[zeilen][spalten] = {
	{77},
	{55, 66},
	{44, 33, 22}
};
</code></pre>
<p>Leider beendet sich die Anwendung mit einem Laufzeitfehler, sobald ich Speicher für die Spalte reservieren will, also bei:</p>
<pre><code class="language-cpp">triangle[i] = (uint *)malloc((i + 1) * sizeof(uint));
</code></pre>
<p>Kann mir bitte jemand sagen, wie das richtig geht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204693</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204693</guid><dc:creator><![CDATA[cpprogrammer]]></dc:creator><pubDate>Mon, 23 Apr 2012 06:21:18 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Speicherverwaltung on Mon, 23 Apr 2012 07:55:38 GMT]]></title><description><![CDATA[<p>cpprogrammer schrieb:</p>
<blockquote>
<p>Kann mir bitte jemand sagen, wie das richtig geht?</p>
</blockquote>
<p>Mit <code>vector</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204718</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Mon, 23 Apr 2012 07:55:38 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Speicherverwaltung on Mon, 23 Apr 2012 08:00:39 GMT]]></title><description><![CDATA[<p>Natürlich mit vector <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
<p>Aber nehmen wir mal an, ich hätte keinen vector zur Verfügung und müsste das selbst machen.<br />
Laut <a href="http://openbook.galileocomputing.de/c_von_a_bis_z/014_c_dyn_speicherverwaltung_011.htm#mj8c39512a8855f67117c0abd122d4b01e" rel="nofollow">C Openbook</a> müsste es doch so funktionieren, wie ich es gemacht habe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204721</guid><dc:creator><![CDATA[cpprogrammer]]></dc:creator><pubDate>Mon, 23 Apr 2012 08:00:39 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Speicherverwaltung on Mon, 23 Apr 2012 08:09:52 GMT]]></title><description><![CDATA[<p>C von A bis Z ist so ziemlich eins der schlechtesten, fehlerhaftesten Bücher, die existieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204725</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Mon, 23 Apr 2012 08:09:52 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Speicherverwaltung on Mon, 23 Apr 2012 08:10:28 GMT]]></title><description><![CDATA[<p><code>triangel</code> ist nicht initialisert, und damit rufst du <code>realloc</code> auf. Das kann der Grund sein, weiter habe ich nicht geguckt. Benutz´ den Debugger und geh´ das Programm Schritt für Schritt durch, bis es knallt. Ich weiß nicht, auf welchem OS und mit welcher Compiler du arbeitest, aber oft gibt es Tools, die ungültige Speicherzugriffe prüfen. Sowas solltest du ebenfalls einsetzen, wenn es sowas für dein OS/Compiler gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204726</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 23 Apr 2012 08:10:28 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Speicherverwaltung on Mon, 23 Apr 2012 08:11:47 GMT]]></title><description><![CDATA[<p>cpprogrammer schrieb:</p>
<blockquote>
<p>Aber nehmen wir mal an, ich hätte keinen vector zur Verfügung</p>
</blockquote>
<p>Dann würdest du einen schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204729</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Mon, 23 Apr 2012 08:11:47 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Speicherverwaltung on Mon, 23 Apr 2012 09:53:26 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18927">@DocShoe</a>:<br />
Ja, triangle ist nicht initialisiert. Das ist richtig.<br />
Aber in der Referenz von <a href="http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/" rel="nofollow">cpluscplus.com</a> steht:</p>
<blockquote>
<p>In case that ptr is NULL, the function behaves exactly as malloc, assigning a new block of size bytes and returning a pointer to the beginning of it.</p>
</blockquote>
<p>Deshalb geh ich davon aus, dass triangle im ersten Schleifendurchlauf einen uint-Zeiger aufnehmen kann, den ich unten mit malloc hole. Im nächsten dann wieder einen mehr usw.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22298">@TyRoXx</a>:<br />
Ich wusste, dass die Antwort kommt ^^<br />
Du hast im Normalfall natürlich recht, aber ich würde halt gern wissen, wie ich es auf diesem Weg hinbekomme. Wenn ich zum Beispiel in C programmieren würde, dann hätte ich diesen vector eben nicht und könnte ihn mir, soweit ich weiß, auch nicht schreiben (ob das mit structs geht weiß ich nicht, mit denen hab ich mich nie so sehr beschäftigt).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204785</guid><dc:creator><![CDATA[cpprogrammer]]></dc:creator><pubDate>Mon, 23 Apr 2012 09:53:26 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Speicherverwaltung on Mon, 23 Apr 2012 10:00:21 GMT]]></title><description><![CDATA[<p>cpprogrammer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18927">@DocShoe</a>:<br />
Ja, triangle ist nicht initialisiert. Das ist richtig.<br />
Aber in der Referenz von <a href="http://www.cplusplus.com/reference/clibrary/cstdlib/realloc/" rel="nofollow">cpluscplus.com</a> steht:</p>
<blockquote>
<p>In case that ptr is NULL, the function behaves exactly as malloc, assigning a new block of size bytes and returning a pointer to the beginning of it.</p>
</blockquote>
</blockquote>
<p>Ich zitier mal aus einem Tutorial, das ich im weltweiten INet gefunden habe:<br />
&quot;Es ist keineswegs gesichert, dass eine neu angelegte Variable den Wert 0 hat, solange Sie das nicht explizit festlegen.&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204790</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Mon, 23 Apr 2012 10:00:21 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Speicherverwaltung on Mon, 23 Apr 2012 10:02:24 GMT]]></title><description><![CDATA[<p>cpprogrammer schrieb:</p>
<blockquote>
<p>Ja, triangle ist nicht initialisiert. [...]</p>
<blockquote>
<p>In case that ptr is NULL, [...].</p>
</blockquote>
</blockquote>
<p>&quot;Nicht initialisiert&quot; und &quot;is NULL&quot; sind zwei völlig verschiedene Paar Schuhe.<br />
&quot;Nicht initialisiert&quot; heißt bei PODs &quot;Enthält irgendeinen Speichermist&quot;, in dem Fall also &quot;enthält irgendeine Adresse aber mit ziemlicher Sicherheit nicht NULL&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204792</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 23 Apr 2012 10:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to Dynamische Speicherverwaltung on Mon, 23 Apr 2012 11:10:21 GMT]]></title><description><![CDATA[<p>Oh man, bin ich dämlich... Natürlich habt ihr alle Recht. Das hab ich total übersehen <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="🙄"
    /><br />
Solange ich triangle nicht mit NULL (oder etwas anderem) initialisiere kann dort alles mögliche stehen, was realloc dann wieder zum erweitern des Speicherbereiches verwenden möchte.</p>
<p>Vielen Dank für eure Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204820</guid><dc:creator><![CDATA[cpprogrammer]]></dc:creator><pubDate>Mon, 23 Apr 2012 11:10:21 GMT</pubDate></item></channel></rss>