<?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[Initialisierung eines Array schlägt fehl]]></title><description><![CDATA[<p>Hallo zusammen,<br />
nachdem ich aus einem anderen Thread eine Anleitung bekommen habe, habe ich mir nun ein Template gebastelt, dass ein Array erstellt und dieses gegebenfalls vergrößert (z.B. wenn auf ein Element zugegriffen wird, das es überhaupt nicht gibt). Außerdem wollte ich, dass alle ungebrauchten Elemente mit 0 initialisiert wird. Also wenn das Array vergrößert wird, dann werden alle neuen Elemente auf 0 gesetzt.</p>
<p>So sieht das aus:</p>
<pre><code class="language-cpp">DynArray(int size) { //Konstruktor des Templates DynArray
   str.len=size;
   str.array=new T[size];
   for (int i=0; i&lt;size; i++)
    str.array[i]=0;
  }
//--------------------------------
void NewSize (unsigned int NewSize) { //Vergrößerung des Arrays
    T *temp=new T[str.len];
    for (int i=0; i&lt;str.len; i++)
     temp[i]=str.array[i];
    delete [] str.array;
    str.array = new T[NewSize];
    for (int i=0; i&lt;NewSize; i++) {
     str.array[i]=temp[i];
     if (i&gt;str.len) str.array[i]=0; //alle neuen Elemente auf 0 setzen
    }
    str.len=NewSize;
    delete [] temp;
   }
//--------------------------------
 T operator [] (unsigned int index) { //ein überladener Operator
   if(index &gt; str.len) NewSize(index);
   return str.array[index];
  }
</code></pre>
<p>Nun ist das Problem, das das mit der Initialisierung nicht so ganz klappt:</p>
<pre><code class="language-cpp">int main()
{
 DynArray &lt;int&gt; a1(10);
 a1.Insert(67,3); //Vergrößerung des Arrays
 cout &lt;&lt; a1.Length() &lt;&lt; endl; //Ausgabe der Arraygröße mit anderer Methode --&gt; funktioniert
 int zahl=a1[75];
 cout &lt;&lt; zahl;
} /zahl müsste 0 sein --&gt; ist sie aber nicht
</code></pre>
<p>Die Variable &quot;zahl&quot; müsste 0 sein, doch kommen immer wirre Zahlen - so wenn das Element keinen Wert bekommen hat. Woran liegt das? Das Programm lässt sich kompilieren, d.h. es sind keine syntaktischen Fehler vorhanden.</p>
<p>Wer weiß Rat?</p>
<p>Vielen Dank für eure Hilfe<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246372/initialisierung-eines-array-schlägt-fehl</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 21:25:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246372.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Jul 2009 10:09:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 10:09:19 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
nachdem ich aus einem anderen Thread eine Anleitung bekommen habe, habe ich mir nun ein Template gebastelt, dass ein Array erstellt und dieses gegebenfalls vergrößert (z.B. wenn auf ein Element zugegriffen wird, das es überhaupt nicht gibt). Außerdem wollte ich, dass alle ungebrauchten Elemente mit 0 initialisiert wird. Also wenn das Array vergrößert wird, dann werden alle neuen Elemente auf 0 gesetzt.</p>
<p>So sieht das aus:</p>
<pre><code class="language-cpp">DynArray(int size) { //Konstruktor des Templates DynArray
   str.len=size;
   str.array=new T[size];
   for (int i=0; i&lt;size; i++)
    str.array[i]=0;
  }
//--------------------------------
void NewSize (unsigned int NewSize) { //Vergrößerung des Arrays
    T *temp=new T[str.len];
    for (int i=0; i&lt;str.len; i++)
     temp[i]=str.array[i];
    delete [] str.array;
    str.array = new T[NewSize];
    for (int i=0; i&lt;NewSize; i++) {
     str.array[i]=temp[i];
     if (i&gt;str.len) str.array[i]=0; //alle neuen Elemente auf 0 setzen
    }
    str.len=NewSize;
    delete [] temp;
   }
//--------------------------------
 T operator [] (unsigned int index) { //ein überladener Operator
   if(index &gt; str.len) NewSize(index);
   return str.array[index];
  }
</code></pre>
<p>Nun ist das Problem, das das mit der Initialisierung nicht so ganz klappt:</p>
<pre><code class="language-cpp">int main()
{
 DynArray &lt;int&gt; a1(10);
 a1.Insert(67,3); //Vergrößerung des Arrays
 cout &lt;&lt; a1.Length() &lt;&lt; endl; //Ausgabe der Arraygröße mit anderer Methode --&gt; funktioniert
 int zahl=a1[75];
 cout &lt;&lt; zahl;
} /zahl müsste 0 sein --&gt; ist sie aber nicht
</code></pre>
<p>Die Variable &quot;zahl&quot; müsste 0 sein, doch kommen immer wirre Zahlen - so wenn das Element keinen Wert bekommen hat. Woran liegt das? Das Programm lässt sich kompilieren, d.h. es sind keine syntaktischen Fehler vorhanden.</p>
<p>Wer weiß Rat?</p>
<p>Vielen Dank für eure Hilfe<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750166</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Mon, 27 Jul 2009 10:09:19 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 10:26:25 GMT]]></title><description><![CDATA[<p>Zeile 9 - temp wird mit alter Länge erzeugt<br />
Zeile 15 - temp wird mit neuer Länge befragt. rumms.</p>
<p>Ausserdem - ich würde nie riskieren new [] mit der Möglichkeit [0] zu rufen.<br />
Vielleicht geht das ja gut, aber dem delete [] traue ich dann nicht mehr...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750170</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750170</guid><dc:creator><![CDATA[Bitsy]]></dc:creator><pubDate>Mon, 27 Jul 2009 10:26:25 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 10:26:45 GMT]]></title><description><![CDATA[<p>Du fängst bei 0 an zu zählen.</p>
<pre><code class="language-cpp">int zahl=a1[75];
</code></pre>
<p>erzeugt bei dir ein 75 elementiges array von al[0] bis al[74]. al[75] selber liefert darum nur Mist zurück.</p>
<p>Dir ist aber schon klar, dass du dir WIRKLICH DRINGEND mal die STL anschauen solltest? Du programmierst gerade mit großem Aufwand std::map&lt;int, typename T&gt; nach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750174</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 27 Jul 2009 10:26:45 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 10:28:31 GMT]]></title><description><![CDATA[<p>Kommt doch 'n bißchen was zusammen <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/1750176</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750176</guid><dc:creator><![CDATA[Bitsy]]></dc:creator><pubDate>Mon, 27 Jul 2009 10:28:31 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 14:07:20 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
vielen Dank für eure Antworten.</p>
<p>@Bisty: So besser?</p>
<pre><code class="language-cpp">for (int i=0; i&lt;NewSize; i++) {
     if(i&lt;=str.len) str.array[i]=temp[i];
     else str.array[i]=0;
    }
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Siehst du es für sinnvoll an, dass ich das Template so erweiter, dass wenn ich beispielsweise a1[75] schreibe, ein Array von 76 Elementen angelet wird, damit ich genau diesen Fehler umgehen kann. Auf der anderen Seite würde das natürlich für Verwirrung sorgen, da dann etwas anderen ausgeführt wird, als das was der Benutzer möchte.</p>
<p>Sobald ich mein neues Buch habe werde ich mich in die STL Libary einarbeiten. Außerdem ist es doch eine gute Übung für mich <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>Ich korrigiere nun mal ein bissl und werde mich dann melden, ob es geklappt hat. Aber noch eine andere Frage bezüglich dem überladenen Operator. Ich habe folgendes geschrieben:</p>
<pre><code class="language-cpp">T operator [] (unsigned int index) {
   if(index &gt; str.len) NewSize(index);
   return str.array[index];
  }
</code></pre>
<p>Man kann aber auch das schreiben:</p>
<pre><code class="language-cpp">T&amp; operator [](unsigned index) {
        if(index &gt; val.len) 
            NewSize(index);
        return val.array[index];
    }
</code></pre>
<p>Da ich mich immer noch ein bisschen schwer mit der Zeigerarithmetik tue, wollte ich fragen, was es bringt, dass ich hier den Referenzoperator noch hinzufüge. Mit welcher Adresse wird da genau gearbeitet bzw welche Adresse wird zurückgegebn?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750200</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Mon, 27 Jul 2009 14:07:20 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 12:02:55 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Siehst du es für sinnvoll an, dass ich das Template so erweiter, dass wenn ich beispielsweise a1[75] schreibe, ein Array von 76 Elementen angelet wird, damit ich genau diesen Fehler umgehen kann. Auf der anderen Seite würde das natürlich für Verwirrung sorgen, da dann etwas anderen ausgeführt wird, als das was der Benutzer möchte.</p>
</blockquote>
<p>Ich würde sagen, dass wenn der Benutzer a1[75] schreibt, er auch erwartet, dass dieses existiert. Normalerweise weiß auch jeder C/C++ Programmierer, dass das dann 76 Elemente bedeutet.</p>
<blockquote>
<p>Ich korrigiere nun mal ein bissl und werde mich dann melden, ob es geklappt hat. Aber noch eine andere Frage bezüglich dem überladenen Operator. Ich habe folgendes geschrieben:</p>
<pre><code class="language-cpp">T operator [] (unsigned int index) {
   if(index &gt; str.len) NewSize(index);
   return str.array[index];
  }
</code></pre>
<p>Man kann aber auch das schreiben:</p>
<pre><code class="language-cpp">T&amp; operator [](unsigned index) {
        if(index &gt; val.len) 
            NewSize(index);
        return val.array[index];
    }
</code></pre>
<p>Da ich mich immer noch ein bisschen schwer mit der Zeigerarithmetik tue, wollte ich fragen, was es bringt, dass ich hier den Referenzoperator noch hinzufüge. Mit welcher Adresse wird da genau gearbeitet bzw welche Adresse wird zurückgegebn?</p>
</blockquote>
<p>Es wird dann eine Referenz auf val.array[index] zurückgegeben. Da dieses Objekt auch nach dem Verlassen der Methode existiert, kann man es ohne Probleme als Referenz (besser aber als const Referenz) zurückgeben. Auf die Weise spart man sich auch eine Kopieraktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750237</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 27 Jul 2009 12:02:55 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 14:12:33 GMT]]></title><description><![CDATA[<p>Hallo,<br />
so, ich habe alles korrigiert und es funktionier. Doch ein (anderes) Problem bleibt. Ich möchte nämlich mit diesem Programm alle Teiler aller Zahlen eines Intervalls herausfinden. Ich gebe also z.B. 4 und 8 ein und das Programm sucht zu allen Zahlen zwischen 4 und 8 (inkl. 4 und <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /> alle Teiler heraus.</p>
<p>Ich möchte jetzt in diesem sich selbst vergrößernden Array diese Teiler speichern. Für jede Zahl soll ein eigenes Array angelegt werden.</p>
<p>Mein Problem ist, dass ich nicht weiß, wie ich bei jedem Schleifendurchgang eine neue Instanz erzeugen soll.</p>
<p>DynArray a1;</p>
<p>So erzeuge ich eine Instanz, doch wie kann ich in einer Schleife nun a1, a2.. erzeugen.Ich habe versucht die Adressen von den Instanzen in einem anderem Array zu speichern und alles aufn Heap zu legen, doch das funzt nicht.</p>
<p>Kann mir da jemand helfen?</p>
<p>Vielen Dank<br />
lg,freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750319</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Mon, 27 Jul 2009 14:12:33 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 15:20:02 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Hallo zusammen,<br />
vielen Dank für eure Antworten.</p>
<p>@Bisty: So besser?</p>
<pre><code class="language-cpp">for (int i=0; i&lt;NewSize; i++) {
     if(i&lt;=str.len) str.array[i]=temp[i];
     else str.array[i]=0;
    }
</code></pre>
<p>snip</p>
</blockquote>
<p>if(i&lt;=str.len) str.array[i]=temp[i];<br />
Nein, Du hast da noch dieses 'letztes-Element'-Verständnisproblem.<br />
Bei Gleichheit greift er auch noch mal zu, und pickt dann temp[str.len].<br />
Das ist die Dimension - und die ist tabu für den Zugriff!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750360</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750360</guid><dc:creator><![CDATA[Bitsy]]></dc:creator><pubDate>Mon, 27 Jul 2009 15:20:02 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 15:56:18 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>So erzeuge ich eine Instanz, doch wie kann ich in einer Schleife nun a1, a2.. erzeugen.Ich habe versucht die Adressen von den Instanzen in einem anderem Array zu speichern und alles aufn Heap zu legen, doch das funzt nicht.</p>
</blockquote>
<p>Da du dich ja so gegen die STL sperrst: Das ist schon der richtige Ansatz, was genau geht denn nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750382</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 27 Jul 2009 15:56:18 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 16:43:29 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<blockquote>
<p>Da du dich ja so gegen die STL sperrst</p>
</blockquote>
<p>Ich sperre mich nicht gegen STL, doch möchte ich einfach das Programm so schreiben, da ich mich sowieso gerade mit dynamischen Arrays und Zeigern beschäftige und dies als eine gute Übung ansehe.<br />
Ich habe folgendes versucht:</p>
<pre><code class="language-cpp">DynArray &lt;int&gt; a1(10) //Anlegen einer Instanz
DynArray &lt;int&gt; *array //Zeiger auf array

array=new DynArray[10]; //So deklariere ich ein &quot;normales&quot; dynamisches Array, doch bezweifel ich, dass es auch hier so funzt.
</code></pre>
<p>Das funktioniert so nicht. Da ich gerade nicht an meinem PC sitze, kann ich leider keine Fehlermeldung posten (kommt später), doch allein die zweite Zeile sieht in diesem Fall nach einem Fehler aus, da ich keinen Konstruktor aufrufe und laut meines Templates wird damit schon ein Array erstellt.. hä <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>
<p>Ich würde mich nochmal um einen Beispielcode freuen, der mir weiter auf die Sprünge hilft.</p>
<p>Vielen Dank<br />
lg, freakC++</p>
<p>PS.: Bitte nehmt es mir nicht übel, dass ich STL nicht nutzen will, doch möchte ich es einfach so schaffen und somit die dynamische Speicherverwaltung etc. auszschöpfen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750403</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Mon, 27 Jul 2009 16:43:29 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 16:51:17 GMT]]></title><description><![CDATA[<p>Ein allgemeines Beispiel:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class foo{
private:
  T datamember;
public:
  foo(T t): datamember(t){}
  T getData(){return datamember;}
};

int main(){
  foo&lt;int&gt; *array[10];
  for (int i=0; i&lt;10; ++i){
    array[i]=new foo&lt;int&gt;(i);
  }
  for (int i=0; i&lt;10; ++i){
    cout&lt;&lt; array[i]-&gt;getData() &lt;&lt;endl;
  }

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1750409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750409</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 27 Jul 2009 16:51:17 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 17:31:27 GMT]]></title><description><![CDATA[<p>Hallo SeppJ und natürlich auch alle anderen,<br />
danke für dein allgemeines Beispiel. Es hat mir sehr geholfen, doch leider bleibt weiterhin ein Problem stehen. In deinem Array gibt es eine definierte Zahl, die die Anzahl der Arrays angibt. Ich bekomme diese Zahl jedoch erst zur Laufzeit. So sieht es bei mir momentan aus:</p>
<pre><code class="language-cpp">DynArray&lt;int&gt; *sum[dif]; //Fehler
 for (int i=0;i&lt;dif;i++)
  sum [i]= new DynArray &lt;int&gt; ();
</code></pre>
<p>Die int-Variable &quot;dif&quot; sagt mir, wieviele Arrays benötigt werden, doch der Compiler möchte hier einen Konstantenausdruck. Kann man dieses Problem auch irgendwie lösen?</p>
<p>Viele Danke für deine und eure Hilfe<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750424</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Mon, 27 Jul 2009 17:31:27 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 17:38:30 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Die int-Variable &quot;dif&quot; sagt mir, wieviele Arrays benötigt werden, doch der Compiler möchte hier einen Konstantenausdruck. Kann man dieses Problem auch irgendwie lösen?</p>
</blockquote>
<p>Dann muss das eben auch wieder dynamisch sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750430</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 27 Jul 2009 17:38:30 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 18:36:58 GMT]]></title><description><![CDATA[<p>Hallo,<br />
mmh...müsste man dann mit doppelten Zeigern arbeiten? Gibt es da vielleicht auch so einen guten Beispielcode wie Du ihn in einem deiner letzte Posts gezeigt hast?</p>
<p>vielen dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750464</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Mon, 27 Jul 2009 18:36:58 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 19:29:35 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Hallo,<br />
mmh...müsste man dann mit doppelten Zeigern arbeiten? Gibt es da vielleicht auch so einen guten Beispielcode wie Du ihn in einem deiner letzte Posts gezeigt hast?</p>
</blockquote>
<p>Klar:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class foo{
private:
  T datamember;
public:
  foo(T t): datamember(t){}
  T getData(){return datamember;}
};

int main(){
  int anzahl;
  cout&lt;&lt;&quot;Anzahl Durchläufe?&quot;&lt;&lt;endl;
  cin&gt;&gt;anzahl;
  foo&lt;int&gt; **array;
  array = new foo&lt;int&gt;*[anzahl];
  for (int i=0; i&lt;anzahl; ++i){
    array[i]=new foo&lt;int&gt;(i);
  }
  for (int i=0; i&lt;anzahl; ++i){
    cout&lt;&lt; array[i]-&gt;getData() &lt;&lt;endl;
  }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1750509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750509</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 27 Jul 2009 19:29:35 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 19:43:37 GMT]]></title><description><![CDATA[<p>Hallo,<br />
danke für die Antwort. Du warst schneller als ich, dennoch hier mein Beitrag, der sich jedoch noch nicht auf deine letzte Antwort bezieht, aber dennoch den Code enthält (bin selber drauf gekommen...).</p>
<p>Ich habe noch ein bisschen herumprobiert und folgenden Code erstellt:</p>
<pre><code class="language-cpp">DynArray &lt;int&gt; **sum;
 sum = new DynArray &lt;int&gt; *[10];
 &amp;sum[1]-&gt;Length; //Zugriff???
</code></pre>
<p>So kompiliert das Programm fehlerfrei, doch hatte ich zunächst beim Zugriff folgendes geschrieben:</p>
<pre><code class="language-cpp">sum[1]-&gt;Length;
</code></pre>
<p>Hier sagt mir der Compiler: Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden</p>
<p>Ich hab nur durchs Ausprobieren den &amp;-Operator davor gestellt. Warum kompiliert das Programm jetzt?? Ich verstehe das nicht. Dennoch bringt mir das nichts, denn ich kann die Laenge keiner int-Variable zuweisen, obwohl die Methode Length einen einen int-Wert zurückgibt.</p>
<pre><code class="language-cpp">int zahl=&amp;sum[1]-&gt;Length; //Fehler
</code></pre>
<p>Auch hier erscheint der Fehler &quot;Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden&quot;.</p>
<p>Wie löse ich dieses Problem?</p>
<p>Vielen Dank<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750513</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Mon, 27 Jul 2009 19:43:37 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 19:48:22 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">sum[1]-&gt;Length;
</code></pre>
</blockquote>
<p>Ich vermisse die runden Funktionsaufrufsklammern ame Ende.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750519</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 27 Jul 2009 19:48:22 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Mon, 27 Jul 2009 20:07:05 GMT]]></title><description><![CDATA[<p>freakC++ schrieb:</p>
<blockquote>
<p>Ich habe noch ein bisschen herumprobiert und folgenden Code erstellt:</p>
<pre><code class="language-cpp">DynArray &lt;int&gt; **sum;
 sum = new DynArray &lt;int&gt; *[10];
 &amp;sum[1]-&gt;Length; //Zugriff???
</code></pre>
<p>So kompiliert das Programm fehlerfrei, doch hatte ich zunächst beim Zugriff folgendes geschrieben:</p>
</blockquote>
<p>WTF?!<br />
sum zeigt auf ein Array von 10 Zeigern, <em>die nicht initialisiert wurden</em>.</p>
<p>Wozu hast Du Dir die Mühe gemacht, ein &quot;DynArray&quot; zu schreiben, wenn Du es nicht nutzt und wieder auf diesen Zeiger-Hickhack ausweichst?</p>
<p>Probier mal:</p>
<pre><code class="language-cpp">#include &lt;map&gt;
using std::map;
int main() {
  map&lt;int,map&lt;int,int&gt; &gt; dings;
  dings[23][42] = 99;
}
</code></pre>
<p>freakC++ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">sum[1]-&gt;Length;
</code></pre>
<p>Hier sagt mir der Compiler: Elementfunktion muß aufgerufen oder ihre Adresse übernommen werden</p>
</blockquote>
<p>Abgesehen davon, dass die Zeiger nicht initialisiert wurden -- warum hast Du überhaupt Doppel-Zeiger? -- habe ich keine Definition Deiner DynArray-Klasse gesehen und kann auch nicht sagen, was bei &quot;-&gt;Length;&quot; falsch läuft. Falls es eine Funktion sein soll, dann hast Du den &quot;Funktions-Aufruf-Operator&quot; vergessen: die Klammern ().</p>
<p>freakC++ schrieb:</p>
<blockquote>
<p>Ich hab nur durchs Ausprobieren den &amp;-Operator davor gestellt. Warum kompiliert das Programm jetzt?? Ich verstehe das nicht. Dennoch bringt mir das nichts, denn ich kann die Laenge keiner int-Variable zuweisen, obwohl die Methode Length einen einen int-Wert zurückgibt.</p>
</blockquote>
<p>Aha. Dann soll &quot;Length&quot; also eine Elementfunktion sein. Gut, dann hast du die Klammern () vergessen, wenn Du das Ding aufrufen willst. Du darfst es aber eh nicht aufrufen, weil die Zeiger nicht initialisiert wurden.</p>
<p>Das &amp; davor ist -- glaube ich -- keine legale C++ Syntax. Dein Compiler mag das akzeptieren und einen Elementfunktionszeiger zurückgeben, den man eigentlich sonst über &amp;DynArray&lt;int&gt;::Length bekommt.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1750535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1750535</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 27 Jul 2009 20:07:05 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Wed, 29 Jul 2009 10:38:20 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
sorry, dass ich mich gestern nicht gemeldet habe, doch war ich gestern in England.... Verdammt...ich habe echt vergessen die einzelne Instanz zu initialisiern und ich wundere mich über so ein komisches Zeug, das da raus kommt. Naja, so hat es dann funkioniert:</p>
<pre><code class="language-cpp">int dif;
DynArray &lt;int&gt; **sum;
sum = new DynArray &lt;int&gt; *[dif];
for (int i=0; i&lt;dif; i++)
 sum[i]= new DynArray &lt;int&gt; ();
</code></pre>
<p>Es ist halt alles etwas verwirrend (ich weiß, STL wäre hier viel esser :D), da ich ein dynamisches Array erstelle, indem sich wiederum die Adresse eines Arrays befindet, das sich automatisch vergrößert (ich bin froh nicht der Computer sein zu müssen, der das alles koordiniert).</p>
<p>Ich probiere das jetzt mal aus und wenn es nicht klappt, dann melde ich mich wieder.</p>
<p>Vielen Dank für eure Hilfe<br />
lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1751456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1751456</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Wed, 29 Jul 2009 10:38:20 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Wed, 29 Jul 2009 11:26:49 GMT]]></title><description><![CDATA[<p>Hallo,<br />
leider bleibt ein Fehler bestehen. Zunächst möchte ich jedoch die Funktionsweise des Programms noch mehr erläutern.</p>
<p>Ich gebe zwei Zahlen ein, z.B. 5 und 10. Das Programm sucht nun für jede Zahl zwischen 5 und 10 (einschließlich 5 und 10) alle Teiler heraus und gibt sie aus. Das ist hört sich erstmal nicht so schwer an und ich habe das auch hinbekommen. Ich möchte nun, dass das Programm für jede Zahl ein Array anlegt und alle Teiler reinschreibt. In diesem Fall müssten also 6 Arrays erstellt werden (5,6,7,8,9,10). Eigentlich wird man hier denken: &quot;Ein klarer Fall für std::vecor oder Ähnliches, doch möchte ich dieses Programm ohne die Hilfe der STL Libary erstellen. Fragt am besten nicht warum...ich habe nichts gegen STL, doch denke ich, dass es die perfekt Übung für mich ist.</p>
<p>Das Programm ist noch lange nicht fertig, weswegen Variablenbezeichnungen und Struktur noch zu wünschen lassen. Ich werde mich darum bald kümmern. Nun aber zum Problem: Ich habe jetzt die Arrays erfolgreich initilisiert, doch schaffe ich es nicht, etwas in die Arrays zu schreiben. Hier noch mal<br />
der Ausschnitt des Templates, das ein vergrößerbares Array erstellt:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; class DynArray
{
 public:
  DynArray() {  //Konstruktor 1
   str.len=0;
  }
  DynArray(int size) {  //Konstruktor 2
   str.len=size;
   str.array=new T[size];
   for (int i=0; i&lt;size; i++)
    str.array[i]=0;
  }
  ~DynArray() {
   delete [] str.array;
  }
  int Length (void) {  //Methode zum Herausfinden der Arraygröße
   return str.len;
  }
  void NewSize (unsigned int NewSize) { //Vergrößern des Arrays
    T *temp=new T[str.len];
    for (int i=0; i&lt;str.len; i++)
     temp[i]=str.array[i];
    delete [] str.array;
    str.array = new T[NewSize];
    for (int i=0; i&lt;NewSize; i++) {
     if(i&lt;=str.len) str.array[i]=temp[i];
     else str.array[i]=0;
    }
    str.len=NewSize;
    delete [] temp;
   }
  void Insert (unsigned int key, T value) {   //Einfügen von Werten in das Array
   if (key &gt; str.len || str.len==0) NewSize(key);
   str.array[key]=value;
  }
...
 private:
  struct Ar {
   T *array;
   unsigned int len;
   } str;
</code></pre>
<p>Hier nun das eigentliche Programm:</p>
<pre><code class="language-cpp">void __fastcall TForm1::Button1Click(TObject *Sender)
{
 //Eingabe von i und end. i ist die Startzahl und end die Endzahl
 ...
 arrc=0, p=0; //arrc=aktuelles Array, p=Element des aktuellen Arrays
 int dif=end-i+1;
 DynArray &lt;int&gt; **sum;
 sum = new DynArray &lt;int&gt; *[dif];
 for (int i=0; i&lt;dif; i++)
  sum[i]= new DynArray &lt;int&gt; ();

 for (i;i&lt;=end;i++)  //Die einzelnen Zahlen
 {
  sum[arrc]= new DynArray &lt;int&gt; (); //Bei neuer Zahl muss neues Array erstellt werden
  for (int k=1; k&lt;=i;k++)  //k=potentieller Teiler
  {
   if(i%k==0) //Jede Zahl wird auf Teiler überprüft
   {
    sum[arrc]-&gt;Insert(p,k); //Fehler
    p++; //Bei neuem Teiler wird das Element erhöht
   }
  }
  arrc++; p=0; //arrc wird bei jeder neuen Zahl erhöht; neue Zahl -&gt; neues Array
}
</code></pre>
<p>Ich arbeite mit einer IDE und hier öffnet sich nur ein CPU-Fenster,d.h. es gibt keine Fehlermeldung. Wenn ich auf meine Erfahrung schließe, dann passiert dass, wenn z.B. das Array gar nicht definiert ist, oder das Element<br />
nicht vorhanden ist bzw. das Array zu klein ist. Ich dachte, dass Template macht das alles, doch gibt es irgendwo noch einen Fehler.</p>
<p>Könnt ihr mir helfen, den Fehler zu finden, denn dann wäre ich einen ganzen Schritt weiter.</p>
<p>Vielen Dank<br />
lg, freakC++</p>
<p>/Edit: WEnn ich folgendes schreibe:</p>
<pre><code class="language-cpp">sum[arrc]-&gt;Insert(p,k); 
sum[arrc]-&gt;Read(p);
</code></pre>
<p>dann überprüfe ich, ob die Zahl an die richtige Stelle in das richtige Array geschriebenn wurde. Die Ausgaben stimmen immer, bis zu einem bestimmten Punkt, wenn das Programm abstürzt. Dieser Punkt hängt von der Anfangszahl bzw der Endzahl ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1751468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1751468</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Wed, 29 Jul 2009 11:26:49 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Wed, 29 Jul 2009 11:32:50 GMT]]></title><description><![CDATA[<p>Wie war jetzt nochmal genau der Fehler?<br />
Was ist ein CPU-Fenster?!</p>
<p>In der Funktion NewSize löscht Du das alte Array. Im Default-Konstruktor von DynArray wird str.array aber nicht inisialisiert -&gt; Du löscht irgendwas, was Dir nicht gehört. Dazu liest Du im zweiten Kopiervorgang in temp ein Element zu viel.</p>
<p>Achja, Du kannst Zeiger auch herumschubsen. Überleg mal ob Du in NewSize das ganze Array wirklich zweimal kopieren musst.</p>
<p>Noch ein Punkt: Debugger. Der springt im Zweifel sogar an die Stelle des Absturzes, so dass Du vage Angaben wie &quot;ich sehe nur ein CPU-Fenster, aber keinen Fehler&quot; präzisieren könntest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1751491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1751491</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 29 Jul 2009 11:32:50 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Wed, 29 Jul 2009 12:36:33 GMT]]></title><description><![CDATA[<p>Hallo zusammen<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a>: Du hast mir den entscheidenen Tipp gegeben. Ich darf nicht den Standartkonstruktor verwenden, denn sonst ist das Array nicht initilisiert. Wenn ich jedoch folgendes schreibe</p>
<pre><code class="language-cpp">sum[arrc]= new DynArray &lt;int&gt; (5);
</code></pre>
<p>dann tritt der Fehler wieder sehr früh auf. Die 5 ist einfach so gewählt. Wenn ich jedoch das schreibe</p>
<pre><code class="language-cpp">sum[arrc]= new DynArray &lt;int&gt; (500);
</code></pre>
<p>dann ist der Fehler bei mir noch nicht aufgetreten. Ich verstehe dieses verhalten nicht. Es scheint davon abzuhängen, wieviele Arrays zu Beginn initilisiert werden. Wenn ich aber irgendwann mal mit riesigen Zahlen arbeite, dann weiß ich nicht, ob die 500 noch &quot;reicht&quot;. Wie kann man dieses Verhalten erklären und den Fehler ein für alle entfernen.</p>
<p>Ich verwende den C++ Builder 6 als IDE. Dort öffnet sich ein Fenster mit der Überschrift &quot;CPU&quot; und mir werden irgendwelche Hexadezimal Zahlen angezeigt. Ich weiß ja selber nicht was das ist, aber eine präzise Fehlermeldung gibt es nicht.</p>
<p>Vielen, vielen Dank<br />
lg, frealC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1751576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1751576</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Wed, 29 Jul 2009 12:36:33 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Wed, 29 Jul 2009 13:04:45 GMT]]></title><description><![CDATA[<p>Hast Du den anderen Hinweis (im Array temp eins zuviel gelesen) auch verfolgt?</p>
<p>Das CPU-Fenster im Borland Builder deutet darauf hin, dass der den Absturz erkennt und versucht, Dir die genaueren Umstände mitzuteilen. An dieser Stelle kannst Du normalerweise über &quot;Aufruflisten&quot; oder &quot;Stacktraces&quot; auch an die Stelle im Programm gelangen, die den Absturz verursacht. Das wäre jedenfalls bei anderen IDEs üblich. Wie das genau bei Borland funktioniert, kann ich Dir aber nicht sagen, da ich Borland nicht verwende.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1751602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1751602</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 29 Jul 2009 13:04:45 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Thu, 30 Jul 2009 08:30:38 GMT]]></title><description><![CDATA[<p>int dif=end-i+1;</p>
<p>Notfalls hilf Dir durch Einsetzen kleinstmöglicher Zahlen.<br />
z.B. 1 für i und 2 für end.<br />
dif = 2-1+1; macht 2!<br />
Ist das wirklich die Differenz zwischen 2 und 1?</p>
<p>Manchmal hat man einfach ein dämliches Grundproblem zu kapieren, daß man 23 Stück Brot kriegt, wenn man 22 mal schneidet - oder so <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/1752089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1752089</guid><dc:creator><![CDATA[Bitsy]]></dc:creator><pubDate>Thu, 30 Jul 2009 08:30:38 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Thu, 30 Jul 2009 09:05:38 GMT]]></title><description><![CDATA[<p>Hallo,<br />
stimmt, daran habe ich noch gar nicht gedacht. Ich werde mir das nochmal genauer angucken!! Danke</p>
<p>lg, freakC++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1752111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1752111</guid><dc:creator><![CDATA[freakC++]]></dc:creator><pubDate>Thu, 30 Jul 2009 09:05:38 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierung eines Array schlägt fehl on Sat, 01 Aug 2009 15:15:55 GMT]]></title><description><![CDATA[<p>Halte durch - nur Fehler bringen einen wirklich voran <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753575</guid><dc:creator><![CDATA[Bitsy]]></dc:creator><pubDate>Sat, 01 Aug 2009 15:15:55 GMT</pubDate></item></channel></rss>