<?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[Speicherleck bei BigInt-Klasse mit dynamischer Speicherreservierung]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe bereits die Suchfunktion benutzt, aber keinen passenden Beitrag gefunden.</p>
<p>Ich versuche gerade eine BigInt Klasse zu schreiben, die dynamisch Speicher reserviert.<br />
Die Ergebnisse stimmen, aber nach längerem Rechnen geht der Speicher aus.<br />
Ich habe mich an einen C++-Kurs der Uni München gehalten.</p>
<p>Hier die wichtigsten Methoden auf &quot;new&quot; und &quot;delete&quot; reduziert:</p>
<p>Private Attribute:</p>
<p>int length;<br />
char *digits;</p>
<pre><code class="language-cpp">BigInt::BigInt(const char *str){

	this-&gt;length=strlen(str);
	digits = new char[length+1];	

        //String kopieren
        //Ohne Param einfach length=0;
}

BigInt BigInt::operator + (const BigInt &amp;n)const{
	BigInt b;

	b.length = MAX(this-&gt;length,n.length);
	b.digits = new char[b.length+1];

	//Rechne und schreibe in b

	return b;
}

BigInt BigInt::operator * (const BigInt &amp;n)const{
	BigInt b,tmp;
	tmp.digits=new char[this-&gt;length+n.length];	

	//Rechne und schreibe in b

	tmp.~BigInt();
	return b;
}

BigInt &amp;BigInt::operator = (const BigInt &amp;n){
	digits = new char[n.length];
	length=n.length;

        //Kopier n nach this

	return *this;
}

BigInt::~BigInt(){
	delete[] digits;
	digits=NULL;
}
</code></pre>
<p>Ursprünglich wollte ich damit 1¹ + 2² + ... + 1000^1000 berechnen, bekomme später als Ausgabe killed.</p>
<p>Selbst wenn ich die Ergebnisse bei berechnungen direkt lösche wirft die Konsole killed <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<pre><code class="language-cpp">const BigInt power(int i){
	//Pack i in str

	BigInt tmp=str, b=str;

	for (j=1; j&lt;i; j++)
		b=b*tmp;

	tmp.~BigInt();	
	return b;
}

int main(){
	for (int i=1; i&lt;=1000; i++)
		power(i).~BigInt();	

	return 0;
}
</code></pre>
<p>Wo geht der Speicher verloren? <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/265266/speicherleck-bei-bigint-klasse-mit-dynamischer-speicherreservierung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 05:39:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265266.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Apr 2010 13:04:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherleck bei BigInt-Klasse mit dynamischer Speicherreservierung on Tue, 20 Apr 2010 13:04:59 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe bereits die Suchfunktion benutzt, aber keinen passenden Beitrag gefunden.</p>
<p>Ich versuche gerade eine BigInt Klasse zu schreiben, die dynamisch Speicher reserviert.<br />
Die Ergebnisse stimmen, aber nach längerem Rechnen geht der Speicher aus.<br />
Ich habe mich an einen C++-Kurs der Uni München gehalten.</p>
<p>Hier die wichtigsten Methoden auf &quot;new&quot; und &quot;delete&quot; reduziert:</p>
<p>Private Attribute:</p>
<p>int length;<br />
char *digits;</p>
<pre><code class="language-cpp">BigInt::BigInt(const char *str){

	this-&gt;length=strlen(str);
	digits = new char[length+1];	

        //String kopieren
        //Ohne Param einfach length=0;
}

BigInt BigInt::operator + (const BigInt &amp;n)const{
	BigInt b;

	b.length = MAX(this-&gt;length,n.length);
	b.digits = new char[b.length+1];

	//Rechne und schreibe in b

	return b;
}

BigInt BigInt::operator * (const BigInt &amp;n)const{
	BigInt b,tmp;
	tmp.digits=new char[this-&gt;length+n.length];	

	//Rechne und schreibe in b

	tmp.~BigInt();
	return b;
}

BigInt &amp;BigInt::operator = (const BigInt &amp;n){
	digits = new char[n.length];
	length=n.length;

        //Kopier n nach this

	return *this;
}

BigInt::~BigInt(){
	delete[] digits;
	digits=NULL;
}
</code></pre>
<p>Ursprünglich wollte ich damit 1¹ + 2² + ... + 1000^1000 berechnen, bekomme später als Ausgabe killed.</p>
<p>Selbst wenn ich die Ergebnisse bei berechnungen direkt lösche wirft die Konsole killed <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<pre><code class="language-cpp">const BigInt power(int i){
	//Pack i in str

	BigInt tmp=str, b=str;

	for (j=1; j&lt;i; j++)
		b=b*tmp;

	tmp.~BigInt();	
	return b;
}

int main(){
	for (int i=1; i&lt;=1000; i++)
		power(i).~BigInt();	

	return 0;
}
</code></pre>
<p>Wo geht der Speicher verloren? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1885703</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885703</guid><dc:creator><![CDATA[anjohn]]></dc:creator><pubDate>Tue, 20 Apr 2010 13:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck bei BigInt-Klasse mit dynamischer Speicherreservierung on Tue, 20 Apr 2010 13:21:02 GMT]]></title><description><![CDATA[<p>anjohn schrieb:</p>
<blockquote>
<p>Hier die wichtigsten Methoden auf &quot;new&quot; und &quot;delete&quot; reduziert:</p>
</blockquote>
<p>Ich sehr zumindest vieles, was ich in zweifel ziehe.</p>
<p>1. Ich würde nicht die Allokation von Außen erlauben, und mir missfällt aus eben jenen Gründen auch die Implementierung von deinem operator +. Meines Erachtens sollte eine Instanz für seine Daten verantwortlich sein (Sprich: Konstruktor, und nicht nachträgliches einzelnes anpassen).</p>
<p>2. Man ruft eigentlich niemals den Destruktor direkt auf (z.B. operator *, main...), dies geschieht ohnehin wenn eine Stackvariable den Scope verlässt, oder du ein delete auf ein Heapobjekt anwendest.</p>
<p>3. Dein Zuweisungsoperator hat ein Speicherleck, da du den vorher allokierten Speicher von digits nicht freigibst.</p>
<p>4. Das NULL-Setzen eines Zeigers im Destruktor ist nur notwendig, wenn darauf noch zugegriffen wird. Und nun... der Destruktor sollte eigentlich das Ende eines Objektes sein (Es sei den man verwendet den Destruktor wie bei dir falsch).</p>
<p>5. Ein Kopierkonstruktor fehlt (obwohl hier nötig).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885715</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 20 Apr 2010 13:21:02 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck bei BigInt-Klasse mit dynamischer Speicherreservierung on Tue, 20 Apr 2010 13:20:37 GMT]]></title><description><![CDATA[<p>anjohn schrieb:</p>
<blockquote>
<p>Wo geht der Speicher verloren? <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>
</blockquote>
<p>Praktisch überall. Zu jedem new muss ein delete aufgerufen werden. Das einzige new-delete-Paar das ich sehe ist das new im Konstruktor und das delete im Destruktor. In praktisch jeder Operation reservierst du neuen Speicher und gibst ihn nicht frei.</p>
<p>Oh, und du rufst einen Destruktor manuell auf. Das ist auch eine sehr zweifelhafte Aktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885716</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 20 Apr 2010 13:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck bei BigInt-Klasse mit dynamischer Speicherreservierung on Tue, 20 Apr 2010 13:24:06 GMT]]></title><description><![CDATA[<p>Hallo anjohn,</p>
<p>ich sehe bei gar keinen Kopierkonstruktor. Hast Du keinen? Du rufst auch manuell einen Destruktor auf ( <code>tmp.~BigInt();</code> ). Das ist in diesem Fall falsch. Man ruft den Destruktor so gut wie nie manuell auf. Das passiert automatisch, wenn das Objekt ein &quot;automatisches&quot; ist (nicht separat im Freispeicher angelegt) oder Datenelement eines anderen Objekts ist, welches zerstört wird.</p>
<p>Andere Anregungen:<br />
- Du hättest Dir viel an Verwaltungsaufwand bzgl new/delete sparen können, indem Du einfach einen std::string als Datenelement in BigInt benutzt.<br />
- Es sieht so aus, als ob Du die Dezimaldarstellung zum Speicher benutzt. Alternativ könnte man ein p-adisches System mit p=256, p=65536 oder p=2^32 benutzen. Statt std::string wäre dann zB std::vector&lt;uint32_t&gt; angebracht.</p>
<p>Du musst das Rad auch nicht neu erfinden. Wenn Du weniger an der eigenen Implmentierung von BigInt interessiert bist und hauptächlich damit nur rechnen willst, kannst Du Dich <a href="http://www.delorie.com/gnu/docs/gmp/gmp_73.html" rel="nofollow">auch umgucken</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885720</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 20 Apr 2010 13:24:06 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck bei BigInt-Klasse mit dynamischer Speicherreservierung on Tue, 20 Apr 2010 13:54:39 GMT]]></title><description><![CDATA[<p>Oje... Epic Fail</p>
<p>Ich wollte lernen...</p>
<p>*Speicher richtig zu verwalten<br />
*Operatoren richtig überladen<br />
*Mit Objekten in C++ arbeiten</p>
<p>Ich komme aus der Java-Sparte, denn an meiner Uni wird fast nur das gelehrt. Ein bischen C habe ich in Betriebssysteme gelernt, aber das ist eben nicht OOP.</p>
<blockquote>
<p>2. Man ruft eigentlich niemals den Destruktor direkt auf (z.B. operator *, main...), dies geschieht ohnehin wenn eine Stackvariable den Scope verlässt, oder du ein delete auf ein Heapobjekt anwendest.</p>
</blockquote>
<p>Wie ruft man denn sonst einen Destruktor auf? Wann soll das Objekt denn wissen, dass es stirbt? Reicht es demnach einfach nur, den Destruktor implementiert zu haben oder wie?</p>
<blockquote>
<p>3. Dein Zuweisungsoperator hat ein Speicherleck, da du den vorher allokierten Speicher von digits nicht freigibst.</p>
</blockquote>
<p>Das hab ich mir auch schon mal gedacht und davor &quot;delete[] digits;&quot; aufgerufen, dadurch ist das Programm immer abgestürzt.</p>
<blockquote>
<p>5. Ein Kopierkonstruktor fehlt (obwohl hier nötig).</p>
</blockquote>
<p>Wo brauche ich den denn?</p>
<blockquote>
<p>- Du hättest Dir viel an Verwaltungsaufwand bzgl new/delete sparen können, indem Du einfach einen std::string als Datenelement in BigInt benutzt.</p>
</blockquote>
<p>Ja oder ein dynamisches Array oder ich reserviere gleich ein char-Array mit 10.000 Stellen für jedes BigInt <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 bin voll am verzweifeln. Ich möchte gerne wissen wie man richtig Ojekte übergibt, Speicher reserviert und freigibt, ohne das der Garbage Collector einem alles in den A**** schiebt bzw eher rausholt <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/1885742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885742</guid><dc:creator><![CDATA[anjohn]]></dc:creator><pubDate>Tue, 20 Apr 2010 13:54:39 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck bei BigInt-Klasse mit dynamischer Speicherreservierung on Tue, 20 Apr 2010 14:22:21 GMT]]></title><description><![CDATA[<p>anjohn schrieb:</p>
<blockquote>
<p>Ich komme aus der Java-Sparte, denn an meiner Uni wird fast nur das gelehrt. Ein bischen C habe ich in Betriebssysteme gelernt, aber das ist eben nicht OOP.</p>
</blockquote>
<p>C++ auch nicht (zumindest nicht ausschließlich), C++ ist eine Multiparadigmensprache, aber das nur am Rande.</p>
<p>anjohn schrieb:</p>
<blockquote>
<p>Wie ruft man denn sonst einen Destruktor auf? Wann soll das Objekt denn wissen, dass es stirbt? Reicht es demnach einfach nur, den Destruktor implementiert zu haben oder wie?</p>
</blockquote>
<p>Ja, das reicht. Der Compiler weiß wann ein Objekt stirbt, da es in C++ keinen GC wie in Java gibt, und Objekte direkt gelöscht werden.</p>
<pre><code class="language-cpp">{
    A a; // &lt;-- A()
}        // &lt;-- ~A()

{
    A * a;
    a = new A(); // &lt;-- A()
    delete a;    // &lt;-- ~A()
}
</code></pre>
<p>anjohn schrieb:</p>
<blockquote>
<blockquote>
<p>3. Dein Zuweisungsoperator hat ein Speicherleck, da du den vorher allokierten Speicher von digits nicht freigibst.</p>
</blockquote>
<p>Das hab ich mir auch schon mal gedacht und davor &quot;delete[] digits;&quot; aufgerufen, dadurch ist das Programm immer abgestürzt.</p>
</blockquote>
<p>Das liegt aber nicht am &quot;delete[] digits;&quot;. Du hattest sicherlich noch andere Fehler (z.B. das durch den Fehlenden Kopierkonstruktor Speicher zwischen 2 Objekten &quot;geteilt&quot; wurde, aber in einem freigegen wurde, und du nun versuchst das Objekt zum zweiten Mal zu löschen).</p>
<p>Flache und Tiefe Kopie wären hier ein paar Stichworte...</p>
<p>anjohn schrieb:</p>
<blockquote>
<blockquote>
<p>5. Ein Kopierkonstruktor fehlt (obwohl hier nötig).</p>
</blockquote>
<p>Wo brauche ich den denn?</p>
</blockquote>
<p>Jedesmal wenn du ein Objekt kopierst. C++ arbeitet im Gegensatz zu Java mit Objekten und nicht Referenzen.</p>
<pre><code class="language-cpp">void foo1(A a)
{
}

void foo2(A const &amp; a)
{
}

{
  A a;     // &lt;-- A()
  A b = a; // &lt;-- A(A const &amp;) =&gt; Kopierkonstruktor
  foo1(b); // &lt;-- A(A const &amp;) =&gt; Kopierkonstruktor, da Wertübergabe
  foo2(b); // Keine Kopie, da Referenzübergabe
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1885758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885758</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Tue, 20 Apr 2010 14:22:21 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck bei BigInt-Klasse mit dynamischer Speicherreservierung on Tue, 20 Apr 2010 14:57:10 GMT]]></title><description><![CDATA[<p>anjohn schrieb:</p>
<blockquote>
<p>Ich wollte lernen...<br />
*Speicher richtig zu verwalten<br />
*Operatoren richtig überladen<br />
*Mit Objekten in C++ arbeiten</p>
</blockquote>
<p>Du solltest wissen, dass der Compiler automatisch Default-Kopierkonstruktor, -Zuweisungsoperator und -Destruktor erzeugt, falls möglich. Diese tun in einigen Fällen nicht das, was sie sollen -- wie zB in Deinem Fall.</p>
<p>Und Speicher kann man genauso &quot;richtig&quot; verwalten, in dem man die Standard-Container benutzt. ZB so:</p>
<pre><code class="language-cpp">class bigint
{
  std::vector&lt;uint32_t&gt; digits
public:
  bigint(long = 0);
  ...
};
</code></pre>
<p>Hier musst Du Kopierkonstruktor, Zuweisungsoperator und Destruktor nicht selbst schreiben. Die, die vom Compiler automatisch generiert werden, machen genau das richtige. Das sollte auch die Regel sein. Wenn Du es für nötig hältst, diese Funktionen für viele Deiner Klassen manuell zu schreiben, dann ist das ein Indiz dafür, dass Du die Sprache nicht optimal ausnutzt.</p>
<p>Wenn Du einen Zeiger als Datenelement hast, wobei dieser Zeiger auf etwas zeigt, was dem Objekt &quot;gehört&quot; (in dem Sinne, dass das Objekt zB für die Löschung verantwortlich ist), dann musst Du dem Compiler sagen, wie ein Objekt dieses Typs &quot;richtig&quot; kopiert, zugewiesen und zerstört wird, weil das Kopieren, Zuweisen und Zerstören eines Zeigers nicht den gewünschten Effekt hat.</p>
<p>Der Default-Kopierkonstruktor versucht einfach alle Datenelemente zu kopieren -- was auch immer &quot;Kopieren&quot; bedeutet. Bei std::vector bedeutet &quot;Kopieren&quot;, dass der neu erstellte Vektor seine eigenen Elemente als Kopie besitzt:</p>
<pre><code class="language-cpp">vector&lt;int&gt; foo;
foo.push_back(23);
vector&lt;int&gt; bar = foo;           // Kopierkonstruktor von vector&lt;int&gt;
bar.at(0) = 42;
std::cout &lt;&lt; foo.at(0) &lt;&lt; '\n';  // gibt immernoch 23 aus
</code></pre>
<p>(und das ist auch gut so)</p>
<p>anjohn schrieb:</p>
<blockquote>
<p>Ich komme aus der Java-Sparte, denn an meiner Uni wird fast nur das gelehrt. Ein bischen C habe ich in Betriebssysteme gelernt, aber das ist eben nicht OOP.</p>
</blockquote>
<p>Ging mir genauso. Habe mir C++ auch erst am Ende des Studiums unter Verwendung von schlauen Büchern selbst beigebracht. Fazit: Schlaue Bücher lohnen sich. <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>
<p>anjohn schrieb:</p>
<blockquote>
<p>Wie ruft man denn sonst einen Destruktor auf? Wann soll das Objekt denn wissen, dass es stirbt? Reicht es demnach einfach nur, den Destruktor implementiert zu haben oder wie?</p>
</blockquote>
<p>So ähnlich. Üblicherweise findet das Allozieren und Initialisieren direkt hintereinander statt. Beim Zerstören und Freigeben sieht das genauso aus. Du musst ja auch eine &quot;automatische&quot; (auf dem Stack liegende) int-Variable nicht extra zerstören. Das passiert von ganz allein. C++ erlaubt es Dir, eigene Typen zu erstellen, bei denen Du festlegen kannst, was passieren soll, wenn sie kopiert, zugewiesen oder zerstört werden. Das mit dem Zerstören passiert entweder automatisch oder per <code>delete</code> , falls das Objekt im Freispeicher erzeugt wurde. Es gibt Ausnahmen, aber die interessieren erstmal nicht.</p>
<p>anjohn schrieb:</p>
<blockquote>
<blockquote>
<p>5. Ein Kopierkonstruktor fehlt (obwohl hier nötig).</p>
</blockquote>
<p>Wo brauche ich den denn?</p>
</blockquote>
<p>Wenn Du ihn nicht selbst schreibst, wird einer automatisch generiert. Und dieser automatisch generierte, macht in <em>diesem Fall</em> etwas falsches. Eine Klasse, die sich wie <em>int</em> verhalten soll, muss natürlich kopierbar und zuweisbar sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885777</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 20 Apr 2010 14:57:10 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck bei BigInt-Klasse mit dynamischer Speicherreservierung on Thu, 22 Apr 2010 14:39:59 GMT]]></title><description><![CDATA[<p>Hmmmm</p>
<blockquote>
<p>Wenn Du es für nötig hältst, diese Funktionen für viele Deiner Klassen manuell zu schreiben, dann ist das ein Indiz dafür, dass Du die Sprache nicht optimal ausnutzt.</p>
</blockquote>
<p>Klingt sehr weise <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>
<blockquote>
<p>Praktisch überall. Zu jedem new muss ein delete aufgerufen werden. Das einzige new-delete-Paar das ich sehe ist das new im Konstruktor und das delete im Destruktor. In praktisch jeder Operation reservierst du neuen Speicher und gibst ihn nicht frei.</p>
</blockquote>
<p>Also ich habe jetzt noch einen Kopier-Konstruktur aber das ist natürlich nicht die Lösung des Speicherproblems.<br />
Wenn ich meine Objekte nicht selber löschen soll, wieso fehlen dann new-delete-Paare?<br />
In meinen Rechenoperationen für Multiplikation und Addition erzeuge ich jeweils ein neues BigInt-Objekt und gebe es als Rückgabewert der Funktion aus.</p>
<p>Wenn jetzt folgendes passiert: bigint3 = (bigint1+bigint2)<br />
Das Objekt das bei der Addition erzeugt wird, stirbt, nachdem es vom Gleichheitsoperator nach bigint3 kopiert wurde oder? Ich hatte immer das Gefühl dass das erzeugte Objekt nachher im Speicher rumirrt...</p>
<p>Und habe ich es dann richtig verstanden? Wenn ich z.B. mit int *peter = new int[100] Speicher allokiere, und später wieder peter = new int[200] sage, dann habe ich zwar für 200 Integer Speicher reserviert, aber die alten 100 Felder sind verloren weil ich sie hätte freigeben müssen?</p>
<p><a href="http://www.etp.physik.uni-muenchen.de/kurs/Computing/ckurs/node36.html" rel="nofollow">http://www.etp.physik.uni-muenchen.de/kurs/Computing/ckurs/node36.html</a><br />
Was sagt ihr denn zu dieser Übung? Macht man das dann überhaupt so?</p>
<p>Danke für die ganzen Antworten, sehr kompetentes Forum muss ich sagen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1886790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1886790</guid><dc:creator><![CDATA[anjohn]]></dc:creator><pubDate>Thu, 22 Apr 2010 14:39:59 GMT</pubDate></item></channel></rss>