<?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[delete und pointer- Frage]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>folgende Zeilen:</p>
<pre><code>struct FRIEND {
	char* name;
	long tel;
};

//1.
int countFriends_zeiger(FRIEND* pF);
//2.
int compareFriends(FRIEND pF, FRIEND pF);

FRIEND* pF = new FRIEND;

int main()
{
	//1.
	pF-&gt;name = &quot;Alfons&quot;; pF-&gt;tel = 11;
	(pF + 1)-&gt;name = &quot;Egon&quot;; (pF + 1)-&gt;tel = 22;
	(pF + 2)-&gt;name = &quot;Johannes&quot;; (pF + 2)-&gt;tel = 33;
	(pF + 3)-&gt;name = &quot;Willi&quot;; (pF + 3)-&gt;tel = 44;
	(pF + 4)-&gt;name = &quot;Xanthippe&quot;; (pF + 4)-&gt;tel = 55;
	(pF + 5)-&gt;name = &quot;Zeratul&quot;; (pF + 5)-&gt;tel = 66;
	(pF + 6)-&gt;name = '\0'; (pF + 6)-&gt;tel = '\0';
	//2.
	FRIEND f1; f1.name = pF-&gt;name; f1.tel = pF-&gt;tel;
	FRIEND f2; f2.name = (pF + 1)-&gt;name; f2.tel = (pF + 1)-&gt;tel;

	//1.
	cout &lt;&lt; &quot;//1.&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;anzahl: &quot; &lt;&lt; countFriends_zeiger(pF) &lt;&lt; endl;
	//2.
	cout &lt;&lt; &quot;\n//2.\ncompareFriends = &quot; &lt;&lt; compareFriends(f1, f2) &lt;&lt; endl;

	/*delete f;		//IN BEARBEITUNG
	f = 0;*/

	cin.get();
	return 0;
}
</code></pre>
<p>1. Warum funktioniert hier &quot;delete f;&quot; nicht so wie es soll? Wie müsste es richtig aussehen?</p>
<p>Und nochmal das gleich, diesmal nur mit ** anstatt von *:</p>
<pre><code>struct FRIEND {
	char* name;
	long tel;
};

//1.
int countFriends(FRIEND** f);
//2.
int compareFriends(FRIEND* f1, FRIEND* f2);

FRIEND** f = new FRIEND*;

int main()
{
	//1.
	(*f)-&gt;name = &quot;Alfons&quot;; (*f)-&gt;tel = 11;
	(*(f + 1))-&gt;name = &quot;Egon&quot;; (*(f + 1))-&gt;tel = 22;

	cout &lt;&lt; &quot;name: &quot; &lt;&lt; (*f)-&gt;name &lt;&lt; &quot;, tel: &quot; &lt;&lt; (*f)-&gt;tel &lt;&lt; endl;
	cout &lt;&lt; &quot;name: &quot; &lt;&lt; (*(f + 1))-&gt;name &lt;&lt; &quot;, tel: &quot; &lt;&lt; (*(f + 1))-&gt;tel &lt;&lt; endl;

	/*//1.
	cout &lt;&lt; &quot;\ncountFriends(f) = &quot; &lt;&lt; countFriends(f) &lt;&lt; endl;*/

	/*delete f;		//IN BEARBEITUNG
	f = 0;*/

	cin.get();
	return 0;
}
</code></pre>
<p>2. Warum funktioniert meine Übergabe der Daten nicht richtig? Wie müsste es richtig aussehen?<br />
(Es funktioniert schon, jedoch stürtzt mein Programm nach dem ausgeben ab, bzw es hängt sich auf.)</p>
<p>Vielen Dank für eure Hilfe und Eure Zeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/302575/delete-und-pointer-frage</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 06:50:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/302575.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 22 Apr 2012 13:10:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to delete und pointer- Frage on Sun, 22 Apr 2012 13:19:43 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>folgende Zeilen:</p>
<pre><code>struct FRIEND {
	char* name;
	long tel;
};

//1.
int countFriends_zeiger(FRIEND* pF);
//2.
int compareFriends(FRIEND pF, FRIEND pF);

FRIEND* pF = new FRIEND;

int main()
{
	//1.
	pF-&gt;name = &quot;Alfons&quot;; pF-&gt;tel = 11;
	(pF + 1)-&gt;name = &quot;Egon&quot;; (pF + 1)-&gt;tel = 22;
	(pF + 2)-&gt;name = &quot;Johannes&quot;; (pF + 2)-&gt;tel = 33;
	(pF + 3)-&gt;name = &quot;Willi&quot;; (pF + 3)-&gt;tel = 44;
	(pF + 4)-&gt;name = &quot;Xanthippe&quot;; (pF + 4)-&gt;tel = 55;
	(pF + 5)-&gt;name = &quot;Zeratul&quot;; (pF + 5)-&gt;tel = 66;
	(pF + 6)-&gt;name = '\0'; (pF + 6)-&gt;tel = '\0';
	//2.
	FRIEND f1; f1.name = pF-&gt;name; f1.tel = pF-&gt;tel;
	FRIEND f2; f2.name = (pF + 1)-&gt;name; f2.tel = (pF + 1)-&gt;tel;

	//1.
	cout &lt;&lt; &quot;//1.&quot; &lt;&lt; endl;
	cout &lt;&lt; &quot;anzahl: &quot; &lt;&lt; countFriends_zeiger(pF) &lt;&lt; endl;
	//2.
	cout &lt;&lt; &quot;\n//2.\ncompareFriends = &quot; &lt;&lt; compareFriends(f1, f2) &lt;&lt; endl;

	/*delete f;		//IN BEARBEITUNG
	f = 0;*/

	cin.get();
	return 0;
}
</code></pre>
<p>1. Warum funktioniert hier &quot;delete f;&quot; nicht so wie es soll? Wie müsste es richtig aussehen?</p>
<p>Und nochmal das gleich, diesmal nur mit ** anstatt von *:</p>
<pre><code>struct FRIEND {
	char* name;
	long tel;
};

//1.
int countFriends(FRIEND** f);
//2.
int compareFriends(FRIEND* f1, FRIEND* f2);

FRIEND** f = new FRIEND*;

int main()
{
	//1.
	(*f)-&gt;name = &quot;Alfons&quot;; (*f)-&gt;tel = 11;
	(*(f + 1))-&gt;name = &quot;Egon&quot;; (*(f + 1))-&gt;tel = 22;

	cout &lt;&lt; &quot;name: &quot; &lt;&lt; (*f)-&gt;name &lt;&lt; &quot;, tel: &quot; &lt;&lt; (*f)-&gt;tel &lt;&lt; endl;
	cout &lt;&lt; &quot;name: &quot; &lt;&lt; (*(f + 1))-&gt;name &lt;&lt; &quot;, tel: &quot; &lt;&lt; (*(f + 1))-&gt;tel &lt;&lt; endl;

	/*//1.
	cout &lt;&lt; &quot;\ncountFriends(f) = &quot; &lt;&lt; countFriends(f) &lt;&lt; endl;*/

	/*delete f;		//IN BEARBEITUNG
	f = 0;*/

	cin.get();
	return 0;
}
</code></pre>
<p>2. Warum funktioniert meine Übergabe der Daten nicht richtig? Wie müsste es richtig aussehen?<br />
(Es funktioniert schon, jedoch stürtzt mein Programm nach dem ausgeben ab, bzw es hängt sich auf.)</p>
<p>Vielen Dank für eure Hilfe und Eure Zeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204449</guid><dc:creator><![CDATA[Floppy212121]]></dc:creator><pubDate>Sun, 22 Apr 2012 13:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to delete und pointer- Frage on Sun, 22 Apr 2012 13:20:48 GMT]]></title><description><![CDATA[<p>Im ersten Code hast du (wie es aussieht) keine Variable namens <code>f</code> und kannst sie deshalb auch nicht im Operator <code>delete</code> verwenden. Im ersten Code greifst du auch auf Speicher zu, der dir nicht gehört und das endet im UB (für nur ein Element allokiert aber auf die folgende sechs (nicht bestehenden) zugegriffen. Und wenn du Zeiger auf Literale machst, sollte das Ziel des Zeigers konstant sein (oder du verwendest direkt <code>std::string</code> ). Allgemein ist das direkte Verwenden von <code>new</code> / <code>delete</code> und ihre Array-Freunde nicht schön und sollte einem Container vorenthalten werden.</p>
<p>Ps: <code>#include &lt;iostream&gt;</code> und <code>using namespace std;</code> im ersten Code vergessen</p>
<p>EDIT:<br />
1. Darf ich fragen, wieso du überhaupt etwas auf dem Heap speichern willst?<br />
2. <code>long</code> als Telefonnummer ist nicht ideal</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204454</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 22 Apr 2012 13:20:48 GMT</pubDate></item><item><title><![CDATA[Reply to delete und pointer- Frage on Sun, 22 Apr 2012 13:23:23 GMT]]></title><description><![CDATA[<p>Danke für deine schnelle Antwort.</p>
<p>&quot;#include &lt;iostream&gt; und using namespace std; im ersten Code vergessen&quot;<br />
... Ich habe es nur einfach nicht mit kopiert. <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=";D"
      alt="😉"
    /></p>
<p>Sollten neue Fragen aufkommen, melde Ich mich wieder.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204455</guid><dc:creator><![CDATA[Floppy212121]]></dc:creator><pubDate>Sun, 22 Apr 2012 13:23:23 GMT</pubDate></item><item><title><![CDATA[Reply to delete und pointer- Frage on Sun, 22 Apr 2012 13:38:32 GMT]]></title><description><![CDATA[<p>Auf deine Frage: Weil uns vorgegeben wurde, das Problem so zu lösen.</p>
<p>So, Ich habe mein erstes Programm nun angepasst.</p>
<pre><code>delete pF;
	pF = 0;
</code></pre>
<p>1. Jedoch hängt sich mein Programm nun bei jedem 2. / 3. mal starten auf. Kannst du mir das etwas genauer erklären? Ich auch nicht wie es nun anders aussehen sollte.</p>
<p>2. Die Frage zum zweiten Code, warum Ich name und tel nicht richtig besetzen kann, steht immer noch. Auch wenn du der Meinung bist, dass dies hier nicht &quot;schön&quot; ist, kannst du mir vielleicht trozdem zeigen, wie es richtig aussehen sollte?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204467</guid><dc:creator><![CDATA[Floppy212121]]></dc:creator><pubDate>Sun, 22 Apr 2012 13:38:32 GMT</pubDate></item><item><title><![CDATA[Reply to delete und pointer- Frage on Mon, 23 Apr 2012 08:35:19 GMT]]></title><description><![CDATA[<p>Weil im Unterschied zu erstem Code du hier überhaupt kein einziges Element hast.</p>
<pre><code class="language-cpp">struct Foo
{
    int a;
    int b;
    int* dummerPointer;
};

int main()
{
    // Ein Foo-Objekt wird erzeugt.
    // In den Variablen «a», «b» und «dummerPointer» steht nur Müll drin.
    Foo aufDemStack;

    aufDemStack.a = 1;
    aufDemStack.b = 2;
    aufDemStack.dummerPointer = new int( 5 );

    // Wenn die Variable «aufDemStack» den Scope verlässt wird
    // alles bis auf «aufDemStack.dummerPointer» zestört,
    // da es auf dem Heap erzeigt wurde.

    Foo* aufDemHeap; // Pointer zeigt ins Nirvana.
    aufDemHeap-&gt;a = 2;  // BOOM!!

    // Der Pointer zeigt auf etwas Existierendes.
    // «aufDemHeap.dummerPointer» zeigt aber nach wie vor ins Nirvana.
    aufDemHeap = new Foo;

    // Die Variable zeigt auf den „nächsten“ Foo. Blöd das es keins mehr gibt.
    Foo*  sollteMannOderFrau_NIE_NIE_Tun = aufDemHeap + 1;

    Foo* fooArray = new Foo[ someValue ]; // Array von Foos.

    // Hier kann man auf alle Elemente von fooArray
    // 0 bis someValue - 1 zugreifen.

    for ( size_t i = 0; i &lt; someValue; ++i )
    {
        fooArray[ i ].a = 0xDEAD; // Arrayzugriff.
        ( fooArray + i )-&gt;b = 0xDEADEAD; // Pointerzugriff
    }

    //...
    //...

    delete aufDemHeap;
    delete[] fooArray;

    // Alle dynamische Foo-Objekte wurden gelöscht.
    // Achtung! falls irgendwo die «dummerPointer» erzeugt wurden
    // gibst es jetzt einen Memleak.

    Foo** crazyComPointer;  // Pointer auf Pointer.
    *crazyComPointer = new Foo; // Wir haben die Adresse von Pointer auf dynamisch erzeigtes Foo.
    ( *crazyComPointer )-&gt;a = 5;
    Foo** crazyComArray2;
     ( * crazyComArray2 ) = new Foo[ someValue ]; // Och.

    // Alles löschen. Alles ganz schnell vergessen. Lehrer ignorieren!
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2204739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204739</guid><dc:creator><![CDATA[Travor]]></dc:creator><pubDate>Mon, 23 Apr 2012 08:35:19 GMT</pubDate></item><item><title><![CDATA[Reply to delete und pointer- Frage on Mon, 23 Apr 2012 08:43:48 GMT]]></title><description><![CDATA[<p>Floppy212121 schrieb:</p>
<blockquote>
<p>So, Ich habe mein erstes Programm nun angepasst.</p>
<pre><code>delete pF;
	pF = 0;
</code></pre>
</blockquote>
<p>Wenn das deine einzigen Anpassungen sind, ist das Programm noch immer so etwas von verkehrt, und verwendet uninitialisierte Speicherbereiche.</p>
<pre><code class="language-cpp">struct FRIEND {
    char* name;
    long tel;
};
</code></pre>
<p>1. name ist nur ein Zeiger, hier fehlt noch einiges (z.B. Alloziation/Freigabe).<br />
2. C-Strings kannst du nicht den Inhalt durch Zuweisung setzen [name = &quot;Egon&quot; ist hier z.B. verkehrt], sondern musst die C-Funktionen strcpy und Co verwenden.</p>
<pre><code class="language-cpp">FRIEND** f = new FRIEND*;
</code></pre>
<p>Ähm... ich hoffe du weißt was du tust... wobei ich eben das nicht glaube.</p>
<pre><code>delete pF;
  pF = 0;
</code></pre>
<p>Zu guter Letzt: Das 0-Setzen eines Zeigers macht nur Sinn, wenn er nochmals verwendet werden soll.</p>
<p>Mit C++ hat das Programm aber so gut wie gar nichts zu tun.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204746</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 23 Apr 2012 08:43:48 GMT</pubDate></item><item><title><![CDATA[Reply to delete und pointer- Frage on Mon, 23 Apr 2012 12:33:59 GMT]]></title><description><![CDATA[<p>Floppy212121 schrieb:</p>
<blockquote>
<p>1. Jedoch hängt sich mein Programm nun bei jedem 2. / 3. mal starten auf. Kannst du mir das etwas genauer erklären? Ich auch nicht wie es nun anders aussehen sollte.</p>
</blockquote>
<p>Ganz anders natürlich! Aber bevor ich dazu mehr sage ein paar Gegenfragen: Wer bringt Dir C++ bei? Ist das eine Übung, die du machen sollst? Wenn ja, wieviel Gestaltungsspielraum hast Du da? Was ist die genaue Fragestellung? Wenn nicht: Möchtest Du C++ richtig lernen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204857</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 23 Apr 2012 12:33:59 GMT</pubDate></item><item><title><![CDATA[Reply to delete und pointer- Frage on Mon, 23 Apr 2012 17:24:23 GMT]]></title><description><![CDATA[<p>... geloest, vielen Dank für eure Hilfe ... jk</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2204995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2204995</guid><dc:creator><![CDATA[Floppy212121]]></dc:creator><pubDate>Mon, 23 Apr 2012 17:24:23 GMT</pubDate></item></channel></rss>