<?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[unerklärlicher Fehler durch Speicherleck?]]></title><description><![CDATA[<p>Mein Programm nutzt 2 heuristische Algorithmen die ein graphentheoretisches Problem lösen. Entweder die Algorithmen finden eine Lösung, oder sie sagen einfach &quot;Nein&quot;. Nun gibt es eine Checkroutine, die prüft ob die resultierenden Graphen wirklich echte Lösungen sind. Nun kommt es vor das die Checkroutine behauptet, die Lösung sei falsch.</p>
<p>So weit so gut, allerdings scheint der Fehler nicht an den Algorithmen selbst zu liegen, denn wenn ich zum Beispiel die Graphen abspeichere und dann erst mit der Checkroutine prüfe kommt kein Fehler. Auch kann ich den Fehler nicht reproduzieren. Das heißt wenn ich das Programm mit exakt den selben Parametern und Randseed (Im Programm wird kräftig randomisiert) laufen lasse, dann tritt der Fehler auch nicht auf. <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>Mein Tipp ist ja das irgendwie ein Speicherleck drin ist, oder so etwas. Ich bekomm den Fehler einfach nicht isoliert... Ich vermute es hat mit den new and delete zu tun. Möglicherweise in Zusammenspiel mit dem vector...</p>
<p>Hier das komplette <a href="http://www.drivehq.com/file/df.aspx/publish/SamuelPlentz/Dateien/src.zip" rel="nofollow">Projekt</a> für die Interessierten.<br />
Achso: Compiler ist Visual Studio 2005 Professional man braucht also das <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&amp;DisplayLang=de" rel="nofollow">Visual C++ 2005 SP1 Redistributable Package</a> um die exe auszuführen.</p>
<p>Ansonsten hier die Code Abschnitte die ich wichtig finde: (Achtung: gekürzt nicht lauffähig...)</p>
<pre><code class="language-cpp">// AllInOne.cpp - Hauptdatei

#include &quot;../../HilfsRoutinen.h&quot;
#include &quot;Algorithmus1.h&quot;
#include &quot;Algorithmus2.h&quot;
#include &quot;Validate.h&quot;

int _tmain(int argc,_TCHAR* argv[])
{
// Parameter einlesen... (KnotenAnzahl, k, delta, Wiederholungsanzahl, KantenAnzahl)

// Hauptschleife

 try{
  srand((unsigned)time(0));	// Initialisierung des Zufallsgenerators

  int *TempKantenOriginal=new int[2*KantenAnzahl];
  int *TempKantenAlg1=new int[2*KantenAnzahl];
  int *TempKantenAlg2=new int[2*KantenAnzahl];

  for(int w=0;w&lt;Wiederholungsanzahl;w++){
   for(int i=0;i&lt;KantenAnzahl;i++){
    TempKantenAlg1[2*i  ]=TempKantenAlg2[2*i  ]=TempKantenOriginal[2*i  ]=getRandom32bit()%KnotenAnzahl;
    TempKantenAlg1[2*i+1]=TempKantenAlg2[2*i+1]=TempKantenOriginal[2*i+1]=getRandom32bit()%KnotenAnzahl;
   }

   cout&lt;&lt;&quot;  Algorithmus 1... &quot;;
   int r1=UseAlgorithm1(KnotenAnzahl,KantenAnzahl,k,TempKantenAlg1);

   cout&lt;&lt;&quot;  Algorithmus 2... &quot;;
   int r2=UseAlgorithm2(KnotenAnzahl,KantenAnzahl,k,TempKantenAlg2);

   cout&lt;&lt;&quot;  Check &quot;;
   int r3=1,r4=1;
   if(r1) r3=Validate(KnotenAnzahl,KantenAnzahl,k,TempKantenAlg1,TempKantenOriginal);
   if(r2) r4=Validate(KnotenAnzahl,KantenAnzahl,k,TempKantenAlg2,TempKantenOriginal);
   if(r3 &amp;&amp; r4) cout&lt;&lt;&quot;erfolgreich\n&quot;;
   else{
    cout&lt;&lt;&quot;erfolglos\n\n&quot;;
    cout&lt;&lt;&quot;Schwerer Fehler kann nicht fortsetzen...\n&quot;;
    _getch();
    exit(0);
   }
  }

  delete []TempKantenOriginal;
  delete []TempKantenAlg1;
  delete []TempKantenAlg2;
  cout&lt;&lt;&quot;Programmende\n&quot;;
 }catch(bad_alloc &amp;ba){ wcout&lt;&lt;&quot;Fehler: Konnte nicht genuegend Speicher beschaffen - \&quot;&quot;&lt;&lt;ba.what()&lt;&lt;&quot;\&quot;\n&quot;; _getch(); return 0; }
}
</code></pre>
<pre><code class="language-cpp">// Algorithmus2.h (Algorithmus 1 sehr ähnlich...)

struct A2_KnotenStruktur{
 int a,b,c;
 vector&lt;int&gt; Kanten;
};

struct A2_KantenStruktur{
 int a,b,c;
};

void Degree(vector&lt;int&gt; *DegreeQueue,A2_KnotenStruktur* Knoten,int KnotenNummer);

int UseAlgorithm2(int KnotenAnzahl,int KantenAnzahl,int k,int *TempKanten);
</code></pre>
<pre><code class="language-cpp">// Algorithmus2.cpp (Algorithmus 1 sehr ähnlich...)

#include &quot;Algorithmus2.h&quot;

void Degree(vector&lt;int&gt; *DegreeQueue,A2_KnotenStruktur* Knoten,int KnotenNummer)
{
 // verschiedene Befehle
}

int UseAlgorithm2(int KnotenAnzahl,int KantenAnzahl,int k,int *TempKanten)
{
 A2_KnotenStruktur *Knoten=new A2_KnotenStruktur[KnotenAnzahl];
 A2_KantenStruktur *Kante=new A2_KantenStruktur[KantenAnzahl*2];
 vector&lt;int&gt; *DegreeQueue=new vector&lt;int&gt;[a];
 vector&lt;int&gt; GreedyListe;

// verschiedene Befehle... z.B.
 Degree(DegreeQueue,Knoten,a);

// Ausgabe in TempKanten Feld
 int pos=0;
 for(int i=0;i&lt;KantenAnzahl;i++){
  if(Kante[i].a){
   TempKanten[2*pos  ]=Kante[i].b;
   TempKanten[2*pos+1]=Kante[i].c;
   pos++;
  }
 }

 delete []Knoten;
 delete []Kante;
 delete []DegreeQueue;
 return Erfolg;
}
</code></pre>
<pre><code class="language-cpp">// Validate.cpp - hier tritt immer der Fehler auf...

int Validate(int KnotenAnzahl,int KantenAnzahl,int k,int *TempKanten1,int *TempKanten2)
{
 int *EingangsGrad=new int[KnotenAnzahl];
 int *Kanten1=new int[2*KantenAnzahl];
 int *Kanten2=new int[2*KantenAnzahl];
 int *Kanten3=new int[2*KantenAnzahl];
 int *HilfsSpeicher=new int[KnotenAnzahl];

 for(int i=0;i&lt;KantenAnzahl;i++){
  Kanten1[2*i  ]=TempKanten1[2*i  ];
  Kanten1[2*i+1]=TempKanten1[2*i+1];
 }
 for(int i=0;i&lt;KantenAnzahl;i++){
  Kanten2[2*i  ]=TempKanten2[2*i  ];
  Kanten2[2*i+1]=TempKanten2[2*i+1];
 }

// Kanten sortieren - Def. von RadixSort:
// void RadixSort(int *KantenQuelle,int *KantenZiel,int *HilfsSpeicher,int SortierOffset,int KantenAnzahl,int KnotenAnzahl);
 RadixSort(Kanten1,Kanten3,HilfsSpeicher,1,KantenAnzahl,KnotenAnzahl);
 RadixSort(Kanten3,Kanten1,HilfsSpeicher,0,KantenAnzahl,KnotenAnzahl);
 RadixSort(Kanten2,Kanten3,HilfsSpeicher,1,KantenAnzahl,KnotenAnzahl);
 RadixSort(Kanten3,Kanten2,HilfsSpeicher,0,KantenAnzahl,KnotenAnzahl);

 int Result=1;
// Kanten vergleichen - hier tritt der Fehler auf
 for(int i=0;i&lt;KantenAnzahl*2;i++){
  if(Kanten1[i]!=Kanten2[i]) Result=0;
 }

 delete []EingangsGrad;	
 delete []Kanten1;
 delete []Kanten2;
 delete []Kanten3;
 delete []HilfsSpeicher;

 return Result;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/203461/unerklärlicher-fehler-durch-speicherleck</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 18:05:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/203461.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Jan 2008 00:02:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to unerklärlicher Fehler durch Speicherleck? on Wed, 23 Jan 2008 07:25:46 GMT]]></title><description><![CDATA[<p>Mein Programm nutzt 2 heuristische Algorithmen die ein graphentheoretisches Problem lösen. Entweder die Algorithmen finden eine Lösung, oder sie sagen einfach &quot;Nein&quot;. Nun gibt es eine Checkroutine, die prüft ob die resultierenden Graphen wirklich echte Lösungen sind. Nun kommt es vor das die Checkroutine behauptet, die Lösung sei falsch.</p>
<p>So weit so gut, allerdings scheint der Fehler nicht an den Algorithmen selbst zu liegen, denn wenn ich zum Beispiel die Graphen abspeichere und dann erst mit der Checkroutine prüfe kommt kein Fehler. Auch kann ich den Fehler nicht reproduzieren. Das heißt wenn ich das Programm mit exakt den selben Parametern und Randseed (Im Programm wird kräftig randomisiert) laufen lasse, dann tritt der Fehler auch nicht auf. <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>Mein Tipp ist ja das irgendwie ein Speicherleck drin ist, oder so etwas. Ich bekomm den Fehler einfach nicht isoliert... Ich vermute es hat mit den new and delete zu tun. Möglicherweise in Zusammenspiel mit dem vector...</p>
<p>Hier das komplette <a href="http://www.drivehq.com/file/df.aspx/publish/SamuelPlentz/Dateien/src.zip" rel="nofollow">Projekt</a> für die Interessierten.<br />
Achso: Compiler ist Visual Studio 2005 Professional man braucht also das <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=200b2fd9-ae1a-4a14-984d-389c36f85647&amp;DisplayLang=de" rel="nofollow">Visual C++ 2005 SP1 Redistributable Package</a> um die exe auszuführen.</p>
<p>Ansonsten hier die Code Abschnitte die ich wichtig finde: (Achtung: gekürzt nicht lauffähig...)</p>
<pre><code class="language-cpp">// AllInOne.cpp - Hauptdatei

#include &quot;../../HilfsRoutinen.h&quot;
#include &quot;Algorithmus1.h&quot;
#include &quot;Algorithmus2.h&quot;
#include &quot;Validate.h&quot;

int _tmain(int argc,_TCHAR* argv[])
{
// Parameter einlesen... (KnotenAnzahl, k, delta, Wiederholungsanzahl, KantenAnzahl)

// Hauptschleife

 try{
  srand((unsigned)time(0));	// Initialisierung des Zufallsgenerators

  int *TempKantenOriginal=new int[2*KantenAnzahl];
  int *TempKantenAlg1=new int[2*KantenAnzahl];
  int *TempKantenAlg2=new int[2*KantenAnzahl];

  for(int w=0;w&lt;Wiederholungsanzahl;w++){
   for(int i=0;i&lt;KantenAnzahl;i++){
    TempKantenAlg1[2*i  ]=TempKantenAlg2[2*i  ]=TempKantenOriginal[2*i  ]=getRandom32bit()%KnotenAnzahl;
    TempKantenAlg1[2*i+1]=TempKantenAlg2[2*i+1]=TempKantenOriginal[2*i+1]=getRandom32bit()%KnotenAnzahl;
   }

   cout&lt;&lt;&quot;  Algorithmus 1... &quot;;
   int r1=UseAlgorithm1(KnotenAnzahl,KantenAnzahl,k,TempKantenAlg1);

   cout&lt;&lt;&quot;  Algorithmus 2... &quot;;
   int r2=UseAlgorithm2(KnotenAnzahl,KantenAnzahl,k,TempKantenAlg2);

   cout&lt;&lt;&quot;  Check &quot;;
   int r3=1,r4=1;
   if(r1) r3=Validate(KnotenAnzahl,KantenAnzahl,k,TempKantenAlg1,TempKantenOriginal);
   if(r2) r4=Validate(KnotenAnzahl,KantenAnzahl,k,TempKantenAlg2,TempKantenOriginal);
   if(r3 &amp;&amp; r4) cout&lt;&lt;&quot;erfolgreich\n&quot;;
   else{
    cout&lt;&lt;&quot;erfolglos\n\n&quot;;
    cout&lt;&lt;&quot;Schwerer Fehler kann nicht fortsetzen...\n&quot;;
    _getch();
    exit(0);
   }
  }

  delete []TempKantenOriginal;
  delete []TempKantenAlg1;
  delete []TempKantenAlg2;
  cout&lt;&lt;&quot;Programmende\n&quot;;
 }catch(bad_alloc &amp;ba){ wcout&lt;&lt;&quot;Fehler: Konnte nicht genuegend Speicher beschaffen - \&quot;&quot;&lt;&lt;ba.what()&lt;&lt;&quot;\&quot;\n&quot;; _getch(); return 0; }
}
</code></pre>
<pre><code class="language-cpp">// Algorithmus2.h (Algorithmus 1 sehr ähnlich...)

struct A2_KnotenStruktur{
 int a,b,c;
 vector&lt;int&gt; Kanten;
};

struct A2_KantenStruktur{
 int a,b,c;
};

void Degree(vector&lt;int&gt; *DegreeQueue,A2_KnotenStruktur* Knoten,int KnotenNummer);

int UseAlgorithm2(int KnotenAnzahl,int KantenAnzahl,int k,int *TempKanten);
</code></pre>
<pre><code class="language-cpp">// Algorithmus2.cpp (Algorithmus 1 sehr ähnlich...)

#include &quot;Algorithmus2.h&quot;

void Degree(vector&lt;int&gt; *DegreeQueue,A2_KnotenStruktur* Knoten,int KnotenNummer)
{
 // verschiedene Befehle
}

int UseAlgorithm2(int KnotenAnzahl,int KantenAnzahl,int k,int *TempKanten)
{
 A2_KnotenStruktur *Knoten=new A2_KnotenStruktur[KnotenAnzahl];
 A2_KantenStruktur *Kante=new A2_KantenStruktur[KantenAnzahl*2];
 vector&lt;int&gt; *DegreeQueue=new vector&lt;int&gt;[a];
 vector&lt;int&gt; GreedyListe;

// verschiedene Befehle... z.B.
 Degree(DegreeQueue,Knoten,a);

// Ausgabe in TempKanten Feld
 int pos=0;
 for(int i=0;i&lt;KantenAnzahl;i++){
  if(Kante[i].a){
   TempKanten[2*pos  ]=Kante[i].b;
   TempKanten[2*pos+1]=Kante[i].c;
   pos++;
  }
 }

 delete []Knoten;
 delete []Kante;
 delete []DegreeQueue;
 return Erfolg;
}
</code></pre>
<pre><code class="language-cpp">// Validate.cpp - hier tritt immer der Fehler auf...

int Validate(int KnotenAnzahl,int KantenAnzahl,int k,int *TempKanten1,int *TempKanten2)
{
 int *EingangsGrad=new int[KnotenAnzahl];
 int *Kanten1=new int[2*KantenAnzahl];
 int *Kanten2=new int[2*KantenAnzahl];
 int *Kanten3=new int[2*KantenAnzahl];
 int *HilfsSpeicher=new int[KnotenAnzahl];

 for(int i=0;i&lt;KantenAnzahl;i++){
  Kanten1[2*i  ]=TempKanten1[2*i  ];
  Kanten1[2*i+1]=TempKanten1[2*i+1];
 }
 for(int i=0;i&lt;KantenAnzahl;i++){
  Kanten2[2*i  ]=TempKanten2[2*i  ];
  Kanten2[2*i+1]=TempKanten2[2*i+1];
 }

// Kanten sortieren - Def. von RadixSort:
// void RadixSort(int *KantenQuelle,int *KantenZiel,int *HilfsSpeicher,int SortierOffset,int KantenAnzahl,int KnotenAnzahl);
 RadixSort(Kanten1,Kanten3,HilfsSpeicher,1,KantenAnzahl,KnotenAnzahl);
 RadixSort(Kanten3,Kanten1,HilfsSpeicher,0,KantenAnzahl,KnotenAnzahl);
 RadixSort(Kanten2,Kanten3,HilfsSpeicher,1,KantenAnzahl,KnotenAnzahl);
 RadixSort(Kanten3,Kanten2,HilfsSpeicher,0,KantenAnzahl,KnotenAnzahl);

 int Result=1;
// Kanten vergleichen - hier tritt der Fehler auf
 for(int i=0;i&lt;KantenAnzahl*2;i++){
  if(Kanten1[i]!=Kanten2[i]) Result=0;
 }

 delete []EingangsGrad;	
 delete []Kanten1;
 delete []Kanten2;
 delete []Kanten3;
 delete []HilfsSpeicher;

 return Result;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1441690</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441690</guid><dc:creator><![CDATA[Samuel Plentz]]></dc:creator><pubDate>Wed, 23 Jan 2008 07:25:46 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärlicher Fehler durch Speicherleck? on Wed, 23 Jan 2008 01:04:32 GMT]]></title><description><![CDATA[<p>In der function UseAlgorithm2 wird der Speicher für degreeQueue reserviert.</p>
<pre><code class="language-cpp">vector&lt;int&gt; *DegreeQueue=new vector&lt;int&gt;[a];
</code></pre>
<p>aber freigegeben für DegreePriorityQueue</p>
<pre><code class="language-cpp">delete []DegreePriorityQueue;
</code></pre>
<p>ist das ein schreibfehler</p>
<pre><code class="language-cpp">delete []DegreeQueue;
</code></pre>
<p>die function Validate produziert einen speicherleck,<br />
wenn das programm in der for schleife die function verlässt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441699</guid><dc:creator><![CDATA[Ramsis]]></dc:creator><pubDate>Wed, 23 Jan 2008 01:04:32 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärlicher Fehler durch Speicherleck? on Wed, 23 Jan 2008 01:38:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Statt dem hier</p>
<pre><code class="language-cpp">vector&lt;int&gt; *DegreeQueue=new vector&lt;int&gt;[a];
</code></pre>
<p>würde ich lieber das hier verwenden.</p>
<pre><code class="language-cpp">vector&lt;vector&lt;int&gt; &gt; DegreeQueue(a);
</code></pre>
<p>dann braucht man auch kein delete mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441702</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 23 Jan 2008 01:38:11 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärlicher Fehler durch Speicherleck? on Wed, 23 Jan 2008 07:30:44 GMT]]></title><description><![CDATA[<p>Erst einmal vielen Dank für die schnellen Antworten!</p>
<p><strong><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/17279">@Ramsis</a></strong><br />
Oups... Leider sind beide Fehler durch das starke Kürzen aufgetreten. (Hab beides oben geändert)<br />
1. Ja es muss DegreeQueue statt DegreePriorityQueue heißen.<br />
2. Hier wurde eigentlich ein Result auf 0 gesetzt und dann nach den Deletes zurückgegeben...</p>
<p><strong><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a></strong><br />
Wie sieht es mit der Performance dieser Konstruktion aus?</p>
<p>Könnt ihr euch insgesamt erklären, wie es überhaupt passieren kann, dass die Prüfung sofort fehl schlägt, aber wenn ich abspeichere und später prüfe, dann klappt es?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1441751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441751</guid><dc:creator><![CDATA[Samuel Plentz]]></dc:creator><pubDate>Wed, 23 Jan 2008 07:30:44 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärlicher Fehler durch Speicherleck? on Wed, 23 Jan 2008 09:36:22 GMT]]></title><description><![CDATA[<p>Der Zugriff via operator[] sollte gleich schnell wie bei einem normalen Array sein. Gemessen habe ich es aber nicht. Das könntest du doch einfach mal tun. <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/1441824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1441824</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 23 Jan 2008 09:36:22 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärlicher Fehler durch Speicherleck? on Thu, 24 Jan 2008 08:43:19 GMT]]></title><description><![CDATA[<p><strong>Kann jemand sagen, was das Problem sein kann?</strong> (einfach aus dem Bauchgefühl...)<br />
Also woran liegt es das einmal der Test nicht klappt und wenn ich die Daten dann speichere klappt er wieder.</p>
<p>Eins hab ich vielleicht noch nicht erwähnt:<br />
Bei dem Programm hab geh ich an die Grenzen des Speichers. Das Programm kann durchaus einen Gigabyte Speicher nutzen. Windows schaufelt also kräftig in die Auslagerungsdatei und zurück.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442547</guid><dc:creator><![CDATA[Samuel Plentz]]></dc:creator><pubDate>Thu, 24 Jan 2008 08:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärlicher Fehler durch Speicherleck? on Thu, 24 Jan 2008 15:40:09 GMT]]></title><description><![CDATA[<p>Samuel Plentz schrieb:</p>
<blockquote>
<p><strong>Kann jemand sagen, was das Problem sein kann?</strong> (einfach aus dem Bauchgefühl...)<br />
Also woran liegt es das einmal der Test nicht klappt und wenn ich die Daten dann speichere klappt er wieder.</p>
<p>Eins hab ich vielleicht noch nicht erwähnt:<br />
Bei dem Programm hab geh ich an die Grenzen des Speichers. Das Programm kann durchaus einen Gigabyte Speicher nutzen. Windows schaufelt also kräftig in die Auslagerungsdatei und zurück.</p>
</blockquote>
<p>würde sagen, da greifst irgendwo auf speicher zu, den du schon freigegeben hast,<br />
und manchmal haste glück, und da steht noch was du suchsts, und manchmal steht mist drin ...</p>
<p>nimm dir linux + valgrind und mach das prog sauber (speicherlecks)</p>
<p>oder purify (so heisst das windows-teil glaub ich)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442876</guid><dc:creator><![CDATA[Treb]]></dc:creator><pubDate>Thu, 24 Jan 2008 15:40:09 GMT</pubDate></item><item><title><![CDATA[Reply to unerklärlicher Fehler durch Speicherleck? on Thu, 24 Jan 2008 16:08:19 GMT]]></title><description><![CDATA[<p>Warum verwendest du überhaupt in deinen Funktionen gemischt new/delete und std::vector für temporären Speicher?<br />
Nimm doch am besten konsequent std::vector&lt;&gt; (bzw. tr1::array&lt;&gt;):</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; EingangsGrad(KnotenAnzahl);
std::vector&lt;int&gt; Kanten1(2*KantenAnzahl);
...
</code></pre>
<p>Dann brauchst du auch keine Speicherlecks bei vorzeitigem Verlassen einer Funktion (return, exceptions oder...) zu befürchten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1442907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1442907</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Thu, 24 Jan 2008 16:08:19 GMT</pubDate></item></channel></rss>