<?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[Abiturprüfung Informatik: dynamisches Array erklären]]></title><description><![CDATA[<p>Moin,<br />
Ich halte heute Nachmittag meine Abiturprüfung im Fach Informatik. Im Quelltext habe ich ein dynamisches Array so initialisiert:</p>
<pre><code class="language-cpp">Klasse *obj;
obj = new Klasse[zahl];
</code></pre>
<p>Mit meinen Worte würde ich sagen, dass zunächst ein Zeiger auf eine undefinierte Stelle im Speicher ohne bekannte Größe zeigt. Stimmt das so? Warum muss erst ein Zeiger gesetzt werden?<br />
Anschließend wird das Objekt mit dem Operator &quot;new&quot; der Größte zahl initialisiert. Das klingt natürlich laienhaft, wäre jemand so freundlich, mir das kurs zu erklären?</p>
<p>Danke und Gruß, Julian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301223/abiturprüfung-informatik-dynamisches-array-erklären</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 03:37:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301223.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Mar 2012 08:08:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 08:09:23 GMT]]></title><description><![CDATA[<p>Moin,<br />
Ich halte heute Nachmittag meine Abiturprüfung im Fach Informatik. Im Quelltext habe ich ein dynamisches Array so initialisiert:</p>
<pre><code class="language-cpp">Klasse *obj;
obj = new Klasse[zahl];
</code></pre>
<p>Mit meinen Worte würde ich sagen, dass zunächst ein Zeiger auf eine undefinierte Stelle im Speicher ohne bekannte Größe zeigt. Stimmt das so? Warum muss erst ein Zeiger gesetzt werden?<br />
Anschließend wird das Objekt mit dem Operator &quot;new&quot; der Größte zahl initialisiert. Das klingt natürlich laienhaft, wäre jemand so freundlich, mir das kurs zu erklären?</p>
<p>Danke und Gruß, Julian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193991</guid><dc:creator><![CDATA[shizzophate]]></dc:creator><pubDate>Thu, 22 Mar 2012 08:09:23 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 08:22:51 GMT]]></title><description><![CDATA[<p>shizzophate schrieb:</p>
<blockquote>
<p>Stimmt das so?</p>
</blockquote>
<p>shizzophate schrieb:</p>
<blockquote>
<p>Warum muss erst ein Zeiger gesetzt werden?</p>
</blockquote>
<p>Falls du mit &quot;gesetzt&quot; definiert meinst: Muss er nicht, man hätte ihn auch initialisieren können.</p>
<p>shizzophate schrieb:</p>
<blockquote>
<p>Anschließend wird das Objekt mit dem Operator &quot;new&quot; der Größte zahl initialisiert.</p>
</blockquote>
<p><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="😕"
    /><br />
Ne, das ist höchstens noch ungenau. new reserviert genug Speicher für [zahl] hintereinanderliegende Objekte (wenn alles gut läuft), und ruft gegebenenfalls die Konstruktoren auf. new liefert dann einen Zeiger auf diesen Speicherbereich zurück, auf den der Zeiger nach der Zuweisung zeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2193993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2193993</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 22 Mar 2012 08:22:51 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 08:36:25 GMT]]></title><description><![CDATA[<p>Deine Erklärung passt sehr auf den void-Pointer. Bei allen andren Typen ist die Größe des angezeigten Speicher bekannt -&gt; sizeof ( Type ). Auch ein „Arraypointer‘<br />
zeigt nur auf den ersten Element also auf sizeof ( Klasse ) Bytes.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194001</guid><dc:creator><![CDATA[Travor]]></dc:creator><pubDate>Thu, 22 Mar 2012 08:36:25 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 09:20:34 GMT]]></title><description><![CDATA[<p>Danke für die Erklärung.</p>
<p>cooky451 schrieb:</p>
<blockquote>
<p>new reserviert genug Speicher für [zahl] hintereinanderliegende Objekte (wenn alles gut läuft), und ruft gegebenenfalls die Konstruktoren auf. new liefert dann einen Zeiger auf diesen Speicherbereich zurück, auf den der Zeiger nach der Zuweisung zeigt.</p>
</blockquote>
<p>Dennoch verstehe ich nicht, warum es nötig ist, einen Zeiger auf den Zeiger zeigen zu lassen.<br />
Wenn mit</p>
<pre><code class="language-cpp">obj = new Klasse[zahl];
</code></pre>
<p><div class="plugin-markdown"><input type="checkbox" id="checkbox29393" checked="true" /><label for="checkbox29393">( -1 &lt; x &lt; zahl) die Objekte ansprechen kann, wieso muss ich vorher noch einen Zeiger definieren/initialisieren, der auf den Zeiger zeigt, der auf diesen Speicher zeigt (klingt schon komisch beim schreiben)..?</label></div></p>
<p>Gruß!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194022</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194022</guid><dc:creator><![CDATA[shizzophate]]></dc:creator><pubDate>Thu, 22 Mar 2012 09:20:34 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 09:26:26 GMT]]></title><description><![CDATA[<p>shizzophate schrieb:</p>
<blockquote>
<p>Danke für die Erklärung.</p>
<p>cooky451 schrieb:</p>
<blockquote>
<p>new reserviert genug Speicher für [zahl] hintereinanderliegende Objekte (wenn alles gut läuft), und ruft gegebenenfalls die Konstruktoren auf. new liefert dann einen Zeiger auf diesen Speicherbereich zurück, auf den der Zeiger nach der Zuweisung zeigt.</p>
</blockquote>
<p>Dennoch verstehe ich nicht, warum es nötig ist, einen Zeiger auf den Zeiger zeigen zu lassen.</p>
</blockquote>
<p>Das hast du missverstanden/war ungünstig formuliert^^<br />
Du hast einen Zeiger, der auf den dynamischen Speicherbereich zeigt, und keinen Zeiger auf einen Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194032</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Thu, 22 Mar 2012 09:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 09:29:11 GMT]]></title><description><![CDATA[<p>du hast keine doppelten Zeiger.</p>
<pre><code class="language-cpp">Klasse *obj;
// der Zeiger &quot;obj&quot; zeigt jetzt irgendwohin, da er nicht initialisiert wurde.
// besser wäre &quot;Klasse *obj = NULL;&quot;
obj = new Klasse[zahl]; 
// mit &quot;new Klasse[zahl]&quot; wird auf dem Heap Speicher für &quot;zahl&quot; Objekte vom Typ &quot;Klasse&quot; reserviert.
// obj zeigt nach der Zuweisug auf das erste Element
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2194034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194034</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Thu, 22 Mar 2012 09:29:11 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 09:44:13 GMT]]></title><description><![CDATA[<p>Ahh - nu hab ichs verstanden... Sehr cool, dass schon so früh am Tag Leute bereit sind, zu helfen. Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194040</guid><dc:creator><![CDATA[shizzophate]]></dc:creator><pubDate>Thu, 22 Mar 2012 09:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 14:02:06 GMT]]></title><description><![CDATA[<p>Warum schreibst du's nicht einfach in einem? Diese Extra-Zuweisungen finde ich bei Anfängern immer wieder, und ich finde sie weder leserlicher, noch irgendwie besser.</p>
<pre><code class="language-cpp">T* ptr = new T[n];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2194162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194162</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Thu, 22 Mar 2012 14:02:06 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 15:15:56 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Warum schreibst du's nicht einfach in einem? Diese Extra-Zuweisungen finde ich bei Anfängern immer wieder, und ich finde sie weder leserlicher, noch irgendwie besser.</p>
<pre><code class="language-cpp">T* ptr = new T[n];
</code></pre>
</blockquote>
<p>Korrigiere mich bitte aber:<br />
Im Normalfall kann new eine Exception werfen. Um sich dagegen abzusichern<br />
müsste man try und catch verwenden und schon hätte man ein Sichtbarkeitsproblem sich eingehandelt.<br />
Deswegen trennt man die Deklaration und Speicherzugriff, denn sonst hat man</p>
<pre><code class="language-cpp">try
{
    T* ptr = new T[n];
    // hier wird der Pointer benutzt.
    // ...
}
catch()
{
}
</code></pre>
<p>Und z.B. für mein Geschmack ist die die Trennung des Speicherzugriff und der Deklaration leserlicher.Insbesondere, wenn man die Initialisierung hinter einer Funktion &quot;versteckt&quot;.</p>
<pre><code class="language-cpp">template&lt; typename T &gt;
bool __inline erstelle_array( T*&amp; instance, size_t anzahl )
{
        try
	{
		if ( anzahl != 0 )
		{
			instance = new T[ anzahl ];
		}
	}
	catch( std::bad_alloc&amp; )
	{
		instance = 0;
                // Fehlermeldung ausgeben( ? )
		return false;
	}
	return true;
}

T* ptr = 0;
if ( erstelle_array( ptr, 100 ) )
{
    // Variablenverwendung.
}

//oder z.B.

T* ptr = 0;
if ( !erstelle_array( ptr, 100 ) )
{
    // Fehlermeldung.
    return;
}
</code></pre>
<p>Es ist halt Geschmacksfrage.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194228</guid><dc:creator><![CDATA[Travor]]></dc:creator><pubDate>Thu, 22 Mar 2012 15:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 15:19:09 GMT]]></title><description><![CDATA[<p>Travor schrieb:</p>
<blockquote>
<p>Ganz verwirrtes Zeug</p>
</blockquote>
<p>Man <strong>will</strong> doch gerade rausspringen, wenn eine Exception geworfen wird. Und wenn man das anders handeln möchte, nutzt man die nothrow Variante. Diese von dir gepostete Funktion ist nicht nur Quatsch, sondern nicht mal standardkonform.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194229</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 22 Mar 2012 15:19:09 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 15:25:56 GMT]]></title><description><![CDATA[<p>Ob man herausspringen will oder nicht ist eine Entscheidung des Programmierers. Ist halt nicht immer sinnvoll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194235</guid><dc:creator><![CDATA[Travor]]></dc:creator><pubDate>Thu, 22 Mar 2012 15:25:56 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 15:36:38 GMT]]></title><description><![CDATA[<p>Travor schrieb:</p>
<blockquote>
<p>Ob man herausspringen will oder nicht ist eine Entscheidung des Programmierers. Ist halt nicht immer sinnvoll.</p>
</blockquote>
<p><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="😕"
    /> Lies erstmal meinen Beitrag ordentlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194246</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 22 Mar 2012 15:36:38 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 18:05:58 GMT]]></title><description><![CDATA[<p>Travor schrieb:</p>
<blockquote>
<p>Im Normalfall kann new eine Exception werfen.</p>
</blockquote>
<p>Richtig.</p>
<blockquote>
<p>Um sich dagegen abzusichern<br />
müsste man try und catch verwenden</p>
</blockquote>
<p>Bedingt richtig - man muss try/catch nicht unbedingt in der Funktion verwenden, in der man auch new aufruft. Meist kann man sowas schwerwiegendes wie Speichermangel nicht dort verwenden wo man new aufruft, sondern behandelt es irgendwo weiter oben.</p>
<blockquote>
<p>und schon hätte man ein Sichtbarkeitsproblem sich eingehandelt.</p>
</blockquote>
<p>Meistens falsch. Du willst nicht wie in C nur das new in einen try-Block packen, dann Fehler behandeln und nach dem catch mit dem Pointer weiterarbeiten, sondern du packst die gesamte Logik der Funktion in einen try-Block, also die Definition des Pointers, new-Aufruf und die Benutzung des Pointers. Das ist doch einer der großen Vorteile von Exceptions - dass man erst die komplette Logik schreiben kann, gefolgt von der kompletten Fehlerbehandlung, statt immer abwechselnd eine Zeile Logik, fünf Zeilen Fehlerbehandlung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194318</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Thu, 22 Mar 2012 18:05:58 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 21:54:58 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Travor schrieb:</p>
<blockquote>
<p>Ob man herausspringen will oder nicht ist eine Entscheidung des Programmierers. Ist halt nicht immer sinnvoll.</p>
</blockquote>
<p><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="😕"
    /> Lies erstmal meinen Beitrag ordentlich.</p>
</blockquote>
<p>Sorry ich habe das mal wieder falsch gelesen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> .</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>.. Meist kann man sowas schwerwiegendes wie Speichermangel nicht dort verwenden wo man new aufruft, sondern behandelt es irgendwo weiter oben.<br />
Meistens falsch. Du willst nicht wie in C nur das new in einen try-Block packen, dann Fehler behandeln und nach dem catch mit dem Pointer weiterarbeiten, sondern du packst die gesamte Logik der Funktion in einen try-Block, also die Definition des Pointers, new-Aufruf und die Benutzung des Pointers.</p>
</blockquote>
<p>Ja stimmt auch alles. Allerdings erlaubt mir meine Konstruktion das ganze in eine while-Schleife zu packen und einfach abzuwarten bis für bestimmte ( in dem Fall sekundäre ) Aufgaben mal wieder Ressourcen da sind. Mir ist keine andere Lösung eingefallen, um so etwas zu erledigen. Und wenn ich sowieso so etwas drin stehen habe, kann ich es überall verwenden, um an der Stelle zu entscheiden was zu tun ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2194391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194391</guid><dc:creator><![CDATA[Travor]]></dc:creator><pubDate>Thu, 22 Mar 2012 21:54:58 GMT</pubDate></item><item><title><![CDATA[Reply to Abiturprüfung Informatik: dynamisches Array erklären on Thu, 22 Mar 2012 22:12:35 GMT]]></title><description><![CDATA[<p>Travor schrieb:</p>
<blockquote>
<p>Allerdings erlaubt mir meine Konstruktion das ganze in eine while-Schleife zu packen und einfach abzuwarten bis für bestimmte ( in dem Fall sekundäre ) Aufgaben mal wieder Ressourcen da sind.</p>
</blockquote>
<p>(geht mit nothrow() auch)<br />
Und du solltest dir mal set_new_handler angucken. <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/2194400</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2194400</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Thu, 22 Mar 2012 22:12:35 GMT</pubDate></item></channel></rss>