<?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[Problem bei der Ausgabe (Dynamische Speicherverwaltung)]]></title><description><![CDATA[<p>Hi,<br />
nachdem ich mich langsam an die Pointer heranwage und auch Pointer-Arrays schon hinbekomme, wollte ich ein kleines Programm (man gibt Name und Nummer ein, diese werden am Ende wieder ausgegeben) so verändern, dass ich die Anzahl der einzugebenden Namen bzw. Nummern beliebig verändern kann.<br />
Ich habe das Problem, dass alle Ausgaben mit den zuletzt eingegebenen Daten belegt sind.<br />
Wenn ich erst den 1. Namen und Nummer eingebe, diese direkt ausgeben lass, dann den nächsten einlese, etc. funktionierts, wie ich es will.<br />
Warum ist das so, und wie behebe ich diesen Fehler?</p>
<pre><code class="language-csharp">#include &lt;iostream&gt;
#include &lt;conio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
	struct Verwaltung
	{	string Name;
		int Nummer;
	};
	Verwaltung *Personen;

	int n=0;

	cout &lt;&lt; &quot;Wie viele Datensaetze wollen Sie eingeben?\t&quot;;
	cin &gt;&gt; n;
	Personen=new Verwaltung[n];
	for (int x=0; x&lt;n; x++)
	{	cout &lt;&lt; &quot;\nName, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t\t&quot;;
		cin &gt;&gt; Personen-&gt;Name;
		cout &lt;&lt; &quot;Nummer, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t&quot;;
		cin &gt;&gt; Personen-&gt;Nummer;
	}
	for (int x=0; x&lt;n; x++)
	{	cout &lt;&lt; &quot;\n\nName, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t\t&quot;;
		cout &lt;&lt; Personen-&gt;Name;
		cout &lt;&lt; &quot;\nNummer, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t&quot;;
		cout &lt;&lt; Personen-&gt;Nummer;
	}

	getch();
	return 0;
}
</code></pre>
<p>(Ich weiß, ich sollte danach wieder den Speicherplatz löschen, so weit bin ich aber noch nicht, dass ich das gemacht habe)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/129377/problem-bei-der-ausgabe-dynamische-speicherverwaltung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 06:58:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/129377.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Dec 2005 10:19:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 10:19:56 GMT]]></title><description><![CDATA[<p>Hi,<br />
nachdem ich mich langsam an die Pointer heranwage und auch Pointer-Arrays schon hinbekomme, wollte ich ein kleines Programm (man gibt Name und Nummer ein, diese werden am Ende wieder ausgegeben) so verändern, dass ich die Anzahl der einzugebenden Namen bzw. Nummern beliebig verändern kann.<br />
Ich habe das Problem, dass alle Ausgaben mit den zuletzt eingegebenen Daten belegt sind.<br />
Wenn ich erst den 1. Namen und Nummer eingebe, diese direkt ausgeben lass, dann den nächsten einlese, etc. funktionierts, wie ich es will.<br />
Warum ist das so, und wie behebe ich diesen Fehler?</p>
<pre><code class="language-csharp">#include &lt;iostream&gt;
#include &lt;conio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string&gt;
using namespace std;

int main()
{
	struct Verwaltung
	{	string Name;
		int Nummer;
	};
	Verwaltung *Personen;

	int n=0;

	cout &lt;&lt; &quot;Wie viele Datensaetze wollen Sie eingeben?\t&quot;;
	cin &gt;&gt; n;
	Personen=new Verwaltung[n];
	for (int x=0; x&lt;n; x++)
	{	cout &lt;&lt; &quot;\nName, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t\t&quot;;
		cin &gt;&gt; Personen-&gt;Name;
		cout &lt;&lt; &quot;Nummer, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t&quot;;
		cin &gt;&gt; Personen-&gt;Nummer;
	}
	for (int x=0; x&lt;n; x++)
	{	cout &lt;&lt; &quot;\n\nName, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t\t&quot;;
		cout &lt;&lt; Personen-&gt;Name;
		cout &lt;&lt; &quot;\nNummer, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t&quot;;
		cout &lt;&lt; Personen-&gt;Nummer;
	}

	getch();
	return 0;
}
</code></pre>
<p>(Ich weiß, ich sollte danach wieder den Speicherplatz löschen, so weit bin ich aber noch nicht, dass ich das gemacht habe)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940844</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Tue, 13 Dec 2005 10:19:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 10:38:31 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Personen[i].Name;
</code></pre>
<p>Das dürfte helfen <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="🙂"
    /><br />
Du musst schon angeben, welches Element im Feld zu haben willst. Du schreibst und liest bisher immer nur auf der 1. Stelle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940867</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Tue, 13 Dec 2005 10:38:31 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 10:42:45 GMT]]></title><description><![CDATA[<p>brauch ich das dann nicht so?</p>
<pre><code class="language-csharp">(*Personen[i]).Name;
</code></pre>
<p>oder so ähnlich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940872</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Tue, 13 Dec 2005 10:42:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 11:00:04 GMT]]></title><description><![CDATA[<p>Oder so (du willst ja bestimmt den ganzen Namen):</p>
<pre><code class="language-cpp">getline(cin, (*(Personen+x)).Name);
//getline(cin, (Personen+x)-&gt;Name);
</code></pre>
<p>EDIT: Pellaeons Lösung geht auch, da man Pointer wie Arrays behandeln kann, und umgekehrt.<br />
EDIT2: Klammern einfügt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940874</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Tue, 13 Dec 2005 11:00:04 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 10:47:35 GMT]]></title><description><![CDATA[<p>hab das mit der 1. lösung ausprobiert. ausgegeben wird alles richtig, nur anschließend bekomm ich ne fehlermeldung:</p>
<p>Expression: _BLOCK_TYPE_IS_VALID(pHead-&gt;nBlockUse)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940877</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940877</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Tue, 13 Dec 2005 10:47:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 10:55:22 GMT]]></title><description><![CDATA[<p>der operator [] bei Zeigern bewirkt, dass automatisch die entsprechende Stelle im Feld adressiert wird UND das der Zeiger dereferenziert wird.</p>
<p>Personen[i].Name entspricht (Personen + i)-&gt;Name oder (*(Personen + i)).Name</p>
<p>Such dir aus was dir am besten gefällt^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940879</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Tue, 13 Dec 2005 10:55:22 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 10:55:36 GMT]]></title><description><![CDATA[<p>Der g++ macht keine Schwierigkeiten:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;string&gt;

using namespace std;

struct Verwaltung {
  string Name;
  int Nummer;
};

int main() {    
    Verwaltung *Personen=0;

    int n=0;

    cout &lt;&lt; &quot;Wie viele Datensaetze wollen Sie eingeben?\t&quot;;
    cin &gt;&gt; n;
    while (getchar()!='\n');

    Personen=new Verwaltung[n];
    for (int x=0; x&lt;n; x++)
    {    cout &lt;&lt; &quot;\nName, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t\t&quot;;
        getline(cin, (Personen+x)-&gt;Name);
        cout &lt;&lt; &quot;Nummer, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t&quot;;
        cin &gt;&gt; (Personen+x)-&gt;Nummer;
        while (getchar()!='\n');
    }

    for (int x=0; x&lt;n; x++)
    {    cout &lt;&lt; &quot;\n\nName, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t\t&quot;;
        cout &lt;&lt; (Personen+x)-&gt;Name;
        cout &lt;&lt; &quot;\nNummer, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t&quot;;
        cout &lt;&lt; (Personen+x)-&gt;Nummer;
    }

    delete [] Personen;

    getchar();
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/940880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940880</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Tue, 13 Dec 2005 10:55:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 10:57:33 GMT]]></title><description><![CDATA[<p>GPC schrieb:</p>
<blockquote>
<p>Oder so (du willst ja bestimmt den ganzen Namen):</p>
<pre><code class="language-cpp">getline(cin, *(Personen+x).Name);
//getline(cin, (Personen+x)-&gt;Name);
</code></pre>
<p>EDIT: Pellaeons Lösung geht auch, da man Pointer wie Arrays behandeln kann, und umgekehrt.</p>
</blockquote>
<p>ich seh grad: das geht schief. der &quot;.&quot; hat ne höhere Priorität als der * also macht der doch *((Personen+x).Name).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940882</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Tue, 13 Dec 2005 10:57:33 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 10:59:25 GMT]]></title><description><![CDATA[<p>Pellaeon schrieb:</p>
<blockquote>
<p>der operator [] bei Zeigern bewirkt, dass automatisch die entsprechende Stelle im Feld adressiert wird UND das der Zeiger dereferenziert wird.</p>
<p>Personen[i].Name entspricht (Personen + i)-&gt;Name oder (*(Personen + i)).Name</p>
<p>Such dir aus was dir am besten gefällt^^</p>
</blockquote>
<p>Wobei man bei Zeigern aus stilistischen Gründen zu -&gt; raten sollte, v.a. da somit offensichtlicher wird, dass mit einem Zeiger gearbeitet wird.</p>
<p>Pellaeon schrieb:</p>
<blockquote>
<p>GPC schrieb:</p>
<blockquote>
<p>Oder so (du willst ja bestimmt den ganzen Namen):</p>
<pre><code class="language-cpp">getline(cin, *(Personen+x).Name);
//getline(cin, (Personen+x)-&gt;Name);
</code></pre>
<p>EDIT: Pellaeons Lösung geht auch, da man Pointer wie Arrays behandeln kann, und umgekehrt.</p>
</blockquote>
<p>ich seh grad: das geht schief. der &quot;.&quot; hat ne höhere Priorität als der * also macht der doch *((Personen+x).Name).</p>
</blockquote>
<p>Eh jup, einmal Klammern bitte :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940883</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Tue, 13 Dec 2005 10:59:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 11:07:45 GMT]]></title><description><![CDATA[<p>und woran liegt das jetzt mit der fehlermeldung?</p>
<p>habe auch</p>
<p>(Personen + i)-&gt;Name</p>
<p>ausprobiert, aber wie erwartet, hat das nix an der fehlermeldung geändert, die nach der ausgabe kommt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940888</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940888</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Tue, 13 Dec 2005 11:07:45 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 11:15:05 GMT]]></title><description><![CDATA[<p>Geh mal mit dem Debugger durch und schaue, wo der Fehler genau auftritt bei welcher Stelle</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940891</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Tue, 13 Dec 2005 11:15:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 11:21:30 GMT]]></title><description><![CDATA[<p>hab ich schon. aber genau am ende wird die meldung angezeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940896</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Tue, 13 Dec 2005 11:21:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 11:33:27 GMT]]></title><description><![CDATA[<p>tu mal das getch zu testzwecken rausu nd schau ob es dann geht. Der Code sieht eigentlich mit der Änderung sauber aus, mal abgesehen vom fehlenden delete[] natürlich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940906</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Tue, 13 Dec 2005 11:33:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 11:56:44 GMT]]></title><description><![CDATA[<p>es lag daran, dass ich bereits das delete mit dazu genommen hab, da aber wohl n fehler drin habe.</p>
<p>habe den delete befehl in die letzte for-schleife gepackt, aber was stimmt denn an der programmierung nicht, hab schon alles ausprobiert, ohne index, mit index, etc.</p>
<pre><code class="language-csharp">for (int x=0; x&lt;n; x++)
	{	cout &lt;&lt; &quot;\n\nName, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t\t&quot;;
		cout &lt;&lt; (Personen + x)-&gt;Name ;
		cout &lt;&lt; &quot;\nNummer, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t&quot;;
		cout &lt;&lt; (Personen + x)-&gt;Nummer ;
		delete Verwaltung[x];
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/940942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940942</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Tue, 13 Dec 2005 11:56:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 12:02:27 GMT]]></title><description><![CDATA[<p>sarah1986 schrieb:</p>
<blockquote>
<pre><code class="language-cpp">delete Verwaltung[x];
</code></pre>
</blockquote>
<p>Die anweisung als solche ist schon unsinnig (sag blos, das hat dein Compiler geschluckt) - 'Verwaltung' ist der Typ. Du mußt deine Variable löschen und zwar als ganzes:</p>
<pre><code class="language-cpp">for(int x=0; x&lt;n; x++)
{
  //Ausgaben
}
delete[] Personen;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/940950</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940950</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 13 Dec 2005 12:02:27 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 12:03:21 GMT]]></title><description><![CDATA[<p>DA liegt der fehler groß groß^^ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>Du hast mit new[] ein Feld dynamisch angelegt, dieses kannst du nun auch nur wieder als ganzes mit delete[]freigeben</p>
<p>new &lt;-&gt; delete<br />
new[] &lt;-&gt; delete[]</p>
<p>Also mache das</p>
<pre><code class="language-cpp">delete[] Personen;
</code></pre>
<p>nachdem zu das Feld nicht mehr benötigst, ergo nach der zweiten for-Schleife</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940952</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Tue, 13 Dec 2005 12:03:21 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 12:25:12 GMT]]></title><description><![CDATA[<p>so ähnlich hatte ich es auch, nur die eckigen klammern hinter dem personen... das ging net. aber so läufts hoffentlich. tausend dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940985</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Tue, 13 Dec 2005 12:25:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 12:49:58 GMT]]></title><description><![CDATA[<p>gibt es die möglichkeit mein programm so zu erweitern, dass ich die abfrage zuvor, wieviele datensätze ich anlegen will, weglasse, und durch irgendne bedingung dann aufgehört wird, wie beispielsweise ein ausrufezeichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940994</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940994</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Tue, 13 Dec 2005 12:49:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 12:53:23 GMT]]></title><description><![CDATA[<p>Ja, allerdings wird die Speicherverwaltung dann schwieriger (weil du vorher wissen mußt, wieviel Platz du brauchst - da müsstest du den belegten Platz in regelmäßigen Abständen reorganisieren). Oder du könntest umsteigen auf STL-Container (vector oder deque).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/940997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/940997</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 13 Dec 2005 12:53:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Tue, 13 Dec 2005 13:22:13 GMT]]></title><description><![CDATA[<p>da reichen meine bisherigen kenntnisse nicht aus, dann lass ich es dabei, trotzdem vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/941034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/941034</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Tue, 13 Dec 2005 13:22:13 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Wed, 14 Dec 2005 06:27:56 GMT]]></title><description><![CDATA[<p>GPC schrieb:</p>
<blockquote>
<p>Oder so (du willst ja bestimmt den ganzen Namen):</p>
<pre><code class="language-cpp">getline(cin, (*(Personen+x)).Name);
//getline(cin, (Personen+x)-&gt;Name);
</code></pre>
<p>EDIT: Pellaeons Lösung geht auch, da man Pointer wie Arrays behandeln kann, und umgekehrt.<br />
EDIT2: Klammern einfügt</p>
</blockquote>
<p>habe mich jetzt nochmal an das prog gesetzt, und versuche alles zu verstehen. was bewirkt dieses +x genau? Muss ich das unbedingt benutzen?</p>
<p>Dann habe ich noch ne Frage:<br />
In der Berufsschule haben wir ein Aufgabenblatt zur Dyn. Speicherverwaltung bekommen. (Verwaltung von Artikeln) Dort steht:</p>
<blockquote>
<p>Als Datenstruktur soll ein 1-dimensionales Array mit Pointern vom Typ T_Artikel gewählt werden, was somit einer halbdynamischen Datenstruktur eintspricht: das Pointer-Array ist statisch, die eigentlichen Artikeldaten werden dynamisch angelegt.</p>
</blockquote>
<p>Was ist damit gemeint? - Ist das das gleiche, wie ich bei meinem Prog verwendet habe oder wieder etwas anderes?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/941579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/941579</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Wed, 14 Dec 2005 06:27:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Wed, 14 Dec 2005 06:58:24 GMT]]></title><description><![CDATA[<p>also das &quot;+ x&quot; dort hat mit Zeigeraritkemtik zu tun.</p>
<p>&quot;Personen&quot; ist dein Feld. Bei Feldern ist der Name ein Zeiger auf das erste Element im Feld, also die 0.te Stelle sozusagen.<br />
Bei Feldern liegen die Elemente zusammenhängend hintereinander im Speicher, deswegen ja ein Feld <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="🙂"
    /><br />
Wenn du jetzt auf das zweite Element zugreifen willst, musst du dich im Feld weiter bewegen. Ein int ist z.B. normalerweise momentan 4 Byte groß. Du müsstes dich also um 4 Adressen weiter bewegen von der Startadresse aus.<br />
C++ ist jedoch clever, jetzt kommt nämlich die Zeigerarithmetik ins Spiel.<br />
Wenn du einen Zeiger + 1 machst, springt er nicht einfach ein Byte weiter, sonder es wird nachgeschaut, von welchem Typ der Zeiger ist und dann wird eine Variable weiter gesprungen. Also am Beispiel hier der erkennt &quot;aha ich zeige auf ein int, int ist 4 Byte groß, also muss ich bei + 1 4 Byte weiter gehen im Feld.</p>
<p>Also sorgt die Zeile (Personen + x) das er die Adresse des x.ten Elements berechnet. Und wenn du nun die Adresse des x.ten Elements hast, kannst du damit arbeiten.</p>
<p>Zu deiner 2. Frage:</p>
<p>Du sollst ein Array von Pointern machen, also</p>
<pre><code class="language-cpp">T_Artikel* zeigerFeld[100];
</code></pre>
<p>In der Aufgabe steht statisch, also ohne new machen udn einfach nen festen wert abgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/941589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/941589</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Wed, 14 Dec 2005 06:58:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Wed, 14 Dec 2005 07:16:15 GMT]]></title><description><![CDATA[<p>aber wenn ich das ohne das +1, sondern mit</p>
<pre><code class="language-csharp">Personen[x].Name;
</code></pre>
<p>mache funzt es ja genauso.</p>
<p>ich dachte, das funzt nur mit new, da ich sonst keinen speicherplatz habe, jetzt SOLL ich es ohne new machen????<br />
da steig ich nicht durch.<br />
Wie soll denn der entsprechende Speicherplatz reserviert werden, wenn ich kein new verwende???<br />
Wann benutze ich dann new und wann nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/941597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/941597</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Wed, 14 Dec 2005 07:16:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Wed, 14 Dec 2005 07:23:43 GMT]]></title><description><![CDATA[<p>siehe Aufgabenstellung:<br />
Wenn du die Anzahl zur Compilezeit kennst(oder wenns halt vom Lehrer/Prof vorgegeben ist^^), dann machst du ein statisches Array.<br />
Wenn die Anzahl jedoch beim Kompilieren unbekannt ist, und erst während der Laufzeot ermittelt wird(wie auch immer: eingabe oder Berechnung oder was weis ich ...) dann musst du new benutzen.</p>
<p>&quot;Personen[x].Name&quot; ist äquivalent zu &quot;(Personen + x)-&gt;Namen&quot;, zumindest in deinem konkreten Fall.<br />
Bei dem statischen Array von Zeigern sieht der Zugriff schon wieder anders aus, weil die Typen anders sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/941601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/941601</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Wed, 14 Dec 2005 07:23:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Wed, 14 Dec 2005 07:41:53 GMT]]></title><description><![CDATA[<p>dann werd ich das mal so probieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/941609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/941609</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Wed, 14 Dec 2005 07:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei der Ausgabe (Dynamische Speicherverwaltung) on Wed, 14 Dec 2005 07:53:19 GMT]]></title><description><![CDATA[<p>habe mein Programm erweitert:</p>
<pre><code class="language-csharp">#include &lt;iostream&gt;
#include &lt;conio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string&gt;
using namespace std;

struct Verwaltung
	{	string Name;
		int Nummer;
	};
	Verwaltung *Personen;

void Arbeiterauflisten(Verwaltung*,int);
void Arbeiterneu(Verwaltung*,int);
void Arbeiteraendern();
void Arbeiterloeschen();

int main()
{
	int n=1;
	char Eingabe;

	do
	{	system(&quot;cls&quot;);
		cout &lt;&lt; &quot;\tPersonalverwaltung&quot;;
		cout &lt;&lt; &quot;\n\t~~~~~~~~~~~~~~~~~~\n\n&quot;;
		cout &lt;&lt; &quot;1 --&gt; Vorhandene Arbeiter ansehen&quot;;
		cout &lt;&lt; &quot;\n2 --&gt; Arbeiter hinzufuegen&quot;;
		cout &lt;&lt; &quot;\n3 --&gt; Arbeiter aendern&quot;;
		cout &lt;&lt; &quot;\n4 --&gt; Arbeiter loeschen&quot;;
		cout &lt;&lt; &quot;\n\n0 --&gt; Programm beenden&quot;;
		cout &lt;&lt; &quot;\n\nIhre Eingabe:\t&quot;;

		cin &gt;&gt; Eingabe;

		switch (Eingabe)
		{
		case '1':
			Arbeiterauflisten(Personen,n);
			break;

		case '2':
			Arbeiterneu(Personen,n);
			break;

		case '3':
			Arbeiteraendern();
			break;

		case '4':
			Arbeiterloeschen();
			break;
		}
	}
	while (Eingabe != '0');

	return 0;
}

void Arbeiterauflisten(Verwaltung *Pers,int v)
{	system(&quot;cls&quot;);
	cout &lt;&lt; &quot;\tIhre Arbeiter:&quot;;
	cout &lt;&lt; &quot;\n\t~~~~~~~~~~~~~&quot;;
	for (int x=0; x&lt;v &amp;&amp; Pers[x].Name.length()!=0; x++)
	{	cout &lt;&lt; &quot;\n\nName, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t\t&quot;;
		cout &lt;&lt; Pers[x].Name ;
		cout &lt;&lt; &quot;\nNummer, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t&quot;;
		cout &lt;&lt; Pers[x].Nummer ;

		getch();
	}
}

void Arbeiterneu(Verwaltung *Pers,int v)
{	char Eing;
	system(&quot;cls&quot;);
	cout &lt;&lt; &quot;\tNeuer Arbeiter:&quot;;
	cout &lt;&lt; &quot;\n\t~~~~~~~~~~~~~~&quot;;
	do
	{	*Pers=new Verwaltung[v];             // Hier kommt der Fehler
		for (int x=0; x&lt;v &amp;&amp; Pers[x].Name.length()!=0; x++)
		{	cout &lt;&lt; &quot;\nName, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t\t&quot;;
			cin &gt;&gt; Pers[x].Name;
			cout &lt;&lt; &quot;Nummer, Person &quot; &lt;&lt; x &lt;&lt; &quot;:\t&quot;;
			cin &gt;&gt; Pers[x].Nummer;
		}
	cout &lt;&lt; &quot;Moechten Sie einen weiteren Arbeiter eingeben? (j/n)\n\n\t&quot;;

	}
	while (Eing=='j');

	getch();
}

void Arbeiteraendern()
{	system(&quot;cls&quot;);
	cout &lt;&lt; &quot;\tIhre Arbeiter:&quot;;
	cout &lt;&lt; &quot;\n\t~~~~~~~~~~~~~&quot;;
	getch();
}

void Arbeiterloeschen()
{	system(&quot;cls&quot;);
	cout &lt;&lt; &quot;\tIhre Arbeiter:&quot;;
	cout &lt;&lt; &quot;\n\t~~~~~~~~~~~~~&quot;;
	getch();

}
</code></pre>
<p>und bekomme nun den Fehler:</p>
<blockquote>
<p>error C2679: Binärer Operator '=': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operator vom Typ 'Verwaltung *' akzeptiert (oder keine geeignete Konvertierung möglich)</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/941614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/941614</guid><dc:creator><![CDATA[sarah1986]]></dc:creator><pubDate>Wed, 14 Dec 2005 07:53:19 GMT</pubDate></item></channel></rss>