<?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[new&#x2F;delete und Adresse?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hab eine kleine Frage, die sicherlich ganz leicht zu beantworten ist, bin ja noch nicht fit in C++ <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>
<pre><code class="language-cpp">class uniarr { 
unival* uvArr; [...]

void funktion(int i) {
unival* neu_uvArr = new unival [arrSize-1];
delete[] uvArr;  

uvArr = neu_uvArr;
[...] }
}
</code></pre>
<p>Ist das so erlaubt? new() gibt ja die Startadresse zurück, wo mein Feld (bestehend aus Instanzen von unival) anfängt. Kann ich das dann einfach so übergeben, und mit uvArr weiterarbeiten?</p>
<p>Hintergrund: Ich habe wie gesagt ein Feld (uvArr) in meiner Klasse (uniarr), dass dynamisch sein soll. Inhalt dieses Feldes sind Instanzen aus meiner Klasse unival. Als Elementvariablen in uniarr habe ich nur den Zeiger auf das dynamische Feld (*uvArr) zur Verfügung. Jetzt soll ich aus diesem bestehenden Feld ein bestimmtes Element rausnehmen/löschen. Für mich bedeutet das: Neues dynamisches Feld mit new() erzeugen (um ein Element kleiner als das alte), alle Werte (bis auf das ungewünschte) kopieren, dann den Speicherplatz des alten Feldes mit delete freigeben und den nunmehr nicht definierten Zeiger *uvArr dem neuen Feld zuzuweisen. Wenn das denn überhaupt erlaubt ist (meine eigentliche Frage) <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="🙄"
    /></p>
<p>Also es funktioniert so erstmal, um das vorwegzunehmen. Aber das muss ja nichts heißen...</p>
<p>Ich hoffe das war verständlich und mir kann jemand helfen.</p>
<p>VIPGuy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168865/new-delete-und-adresse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 13:57:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168865.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Dec 2006 21:29:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to new&#x2F;delete und Adresse? on Thu, 28 Dec 2006 21:29:47 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hab eine kleine Frage, die sicherlich ganz leicht zu beantworten ist, bin ja noch nicht fit in C++ <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>
<pre><code class="language-cpp">class uniarr { 
unival* uvArr; [...]

void funktion(int i) {
unival* neu_uvArr = new unival [arrSize-1];
delete[] uvArr;  

uvArr = neu_uvArr;
[...] }
}
</code></pre>
<p>Ist das so erlaubt? new() gibt ja die Startadresse zurück, wo mein Feld (bestehend aus Instanzen von unival) anfängt. Kann ich das dann einfach so übergeben, und mit uvArr weiterarbeiten?</p>
<p>Hintergrund: Ich habe wie gesagt ein Feld (uvArr) in meiner Klasse (uniarr), dass dynamisch sein soll. Inhalt dieses Feldes sind Instanzen aus meiner Klasse unival. Als Elementvariablen in uniarr habe ich nur den Zeiger auf das dynamische Feld (*uvArr) zur Verfügung. Jetzt soll ich aus diesem bestehenden Feld ein bestimmtes Element rausnehmen/löschen. Für mich bedeutet das: Neues dynamisches Feld mit new() erzeugen (um ein Element kleiner als das alte), alle Werte (bis auf das ungewünschte) kopieren, dann den Speicherplatz des alten Feldes mit delete freigeben und den nunmehr nicht definierten Zeiger *uvArr dem neuen Feld zuzuweisen. Wenn das denn überhaupt erlaubt ist (meine eigentliche Frage) <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="🙄"
    /></p>
<p>Also es funktioniert so erstmal, um das vorwegzunehmen. Aber das muss ja nichts heißen...</p>
<p>Ich hoffe das war verständlich und mir kann jemand helfen.</p>
<p>VIPGuy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199215</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199215</guid><dc:creator><![CDATA[VIPGuy]]></dc:creator><pubDate>Thu, 28 Dec 2006 21:29:47 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und Adresse? on Thu, 28 Dec 2006 21:56:18 GMT]]></title><description><![CDATA[<p>Klingt eigentlich tadellos.<br />
Der Parameter i soll vermutlich angeben, dass das i-te Element gelöscht werden soll? Sofern auch die Löschoperation funktioniert und auch eine Fehlerbehandlung (falls i einen zu großen/zu kleinen Index bezeichen sollte) stattfindet, ist das eine sehr solide Funktion, so wie sie hier steht, imo.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199222</guid><dc:creator><![CDATA[Mecnels]]></dc:creator><pubDate>Thu, 28 Dec 2006 21:56:18 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und Adresse? on Thu, 28 Dec 2006 22:08:17 GMT]]></title><description><![CDATA[<p>Danke für die Antwort, Mecnels <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ja genau, i steht für das Element, dass gelöscht werden soll. Und die erste Zeile der Funktion lautet in der Tat</p>
<pre><code class="language-cpp">if(i&lt;arrSize &amp;&amp; i&gt;=0)
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Aber falls noch jemand seinen Senf dazugeben möchte, insbesondere ob das nun einfach mit der Adressübergabe funktioniert und gültig ist, gerne.</p>
<p>Und...mit dem Quelltext hab ich ja nun zwei Zeiger (*neu_uvArr und *uvArr), die beide auf den gleichen Speicherbereich zeigen. Wie gehe ich dann mit delete vor?</p>
<p>VIPGuy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199224</guid><dc:creator><![CDATA[VIPGuy]]></dc:creator><pubDate>Thu, 28 Dec 2006 22:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und Adresse? on Thu, 28 Dec 2006 22:22:10 GMT]]></title><description><![CDATA[<p>Grundsätzlich ist der Code erstmal ok. Vielmehr kann man sich Gedanken darüber machen, ob die Strategie die Richtige ist.<br />
Wenn du sehr oft Elemente löschen bzw. einfügen musst, passt vllt. eine Liste besser. Zudem solltest du bedenken, dass Speicherreservierung bzw. -freigabe, zumindest was dynamischen Speicher betrifft, aufwändige Angelegenheiten sind. Eine andere Herangehensweise wäre zB, dass du ab dem zu löschenden Element einfach alle nachfolgende Elemente um eine Position nach vorn kopierst. Zusätzlich wären dann zwei Variablen anzulegen. Eine enthält die Gesamtlänge des Arrays. Das ist wichtig, falls man Elemente wieder hinzufügen will und so die maximale Anzahl des reservierten Speichers kennt. Und die andere Variable enthält die Anzahl der aktuell gültigen Elemente. Also im Grunde das, was auch std::vector macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199232</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Thu, 28 Dec 2006 22:22:10 GMT</pubDate></item><item><title><![CDATA[Reply to new&#x2F;delete und Adresse? on Thu, 28 Dec 2006 22:37:52 GMT]]></title><description><![CDATA[<p>Über eine Liste hatte ich auch schon kurz nachgedacht, dass dann aber doch wieder verworfen, des Aufwandes wegen. Bei der hier vorliegenden Aufgabe (bin Student) wird lediglich etwas mit den Zuweisungen gespielt. Nichts Produktives in dem Sinne, aber natürlich als Übung für mich hervorragend geeignet <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>groovemaster schrieb:</p>
<blockquote>
<p>Eine andere Herangehensweise wäre zB, dass du ab dem zu löschenden Element einfach alle nachfolgende Elemente um eine Position nach vorn kopierst. Zusätzlich wären dann zwei Variablen anzulegen. Eine enthält die Gesamtlänge des Arrays. Das ist wichtig, falls man Elemente wieder hinzufügen will und so die maximale Anzahl des reservierten Speichers kennt. Und die andere Variable enthält die Anzahl der aktuell gültigen Elemente. Also im Grunde das, was auch std::vector macht.</p>
</blockquote>
<p>Hört sich so nicht schlecht an. Wenn dann aber der Speicherbereich voll ist, wird einfach ein neuer (passender) angefordert, alle Elemente dahin kopiert und der alte freigegeben? Wäre noch zu überlegen, aber gefällt mir so schonmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Mit std::vector hab ich mich noch gar nicht auseinandergesetzt, sehe das quasi zum ersten Mal <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>
<p>VIPGuy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199237</guid><dc:creator><![CDATA[VIPGuy]]></dc:creator><pubDate>Thu, 28 Dec 2006 22:37:52 GMT</pubDate></item></channel></rss>