<?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[Vollkommen irrer Fehler!]]></title><description><![CDATA[<p>Hi Leude!</p>
<p>Ich bin jetzt seit 1 1/2 tagen in meiner firma total am verzweifeln. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>ich hab ein mfc prog, dass im debug modus immer wieder abstürzt mit einem speicherzugriffsfehler. aber nur im debug modus. im release geht alles wunderbar.</p>
<p>noch verrückter ist allerdings was im debug modus passiert. statt an der stelle, wo es abstürzt einen gelben pfeil darzustellen (wie bei einem normalem fehler), zeigt er ein grünes dreieck, mit der bemerkung, dass <strong>in</strong> der funktion, die er anzeigt, ein fehler passiert ist...<br />
Beispiel:</p>
<pre><code class="language-cpp">if(dlg.DoModal() == IDOK) {...}
</code></pre>
<p>und ich bin in der festen überzeugung, dass <strong>in</strong> DoModal() kein fehler existiert; ist schließlich von microsoft.</p>
<p>wenn man dann sachen auskommentiert, wo man sich vorstellen könnte, dass sie fehler produzieren (dyn. speicherverwaltung, etc.), dann stürzt das programm anderswo ab.<br />
z.B. hier:</p>
<pre><code class="language-cpp">if(init) {...}
</code></pre>
<p>&lt;-- er meint init wäre ungültig, obwohl init vorher per</p>
<pre><code class="language-cpp">bool init;
init=false; //an anderer stelle
</code></pre>
<p>initialisiert wurde. den fehler zeigt er aber nur, wenn man anderes, dass nichts damit zu tun hat auskommentiert. sonst passiert nix!</p>
<p>ich glaube der fehler dreht sich um folgende sache (auch, wenn der debugger anderen müll anzeigt):</p>
<pre><code class="language-cpp">class Beispiel
{
    CString strABC;
    bool init;

}

CArray&lt;Beispiel*,Beispiel*&gt; aArray;

Beispiel* nArrayEl = new Beispiel();
aArray.Add(nArrayEl);
aArray[0].strABC = &quot;Hallo&quot;; // Alles i.O.
aArray[0].strABC = &quot;HalloHalloabc&quot;;
</code></pre>
<p>Um so ähnliche Sachen, wie die letzte Zeile scheint das Programm sich immer wieder zu killen. kann es angehen, dass strABC den nachfolgenden Speicherbereich überschreibt??<br />
Oder, dass das Array nicht genug Speicher bereitsstellt?? &lt;-- Aber das wäre doch eigentlich egal, weil ich nur ein pointer Array habe, oder???</p>
<p>Bitte, Bitte, Bitte helft mir!!!!!!!!!!! habt ihr vielleicht eine Vorstellung woher diese komische Debugger Meldung kommen kann? Nicht im Detail sondern einfach allgemein???</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/50610/vollkommen-irrer-fehler</link><generator>RSS for Node</generator><lastBuildDate>Sun, 31 May 2026 09:06:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/50610.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 01 Oct 2003 12:29:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vollkommen irrer Fehler! on Wed, 01 Oct 2003 12:29:19 GMT]]></title><description><![CDATA[<p>Hi Leude!</p>
<p>Ich bin jetzt seit 1 1/2 tagen in meiner firma total am verzweifeln. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>ich hab ein mfc prog, dass im debug modus immer wieder abstürzt mit einem speicherzugriffsfehler. aber nur im debug modus. im release geht alles wunderbar.</p>
<p>noch verrückter ist allerdings was im debug modus passiert. statt an der stelle, wo es abstürzt einen gelben pfeil darzustellen (wie bei einem normalem fehler), zeigt er ein grünes dreieck, mit der bemerkung, dass <strong>in</strong> der funktion, die er anzeigt, ein fehler passiert ist...<br />
Beispiel:</p>
<pre><code class="language-cpp">if(dlg.DoModal() == IDOK) {...}
</code></pre>
<p>und ich bin in der festen überzeugung, dass <strong>in</strong> DoModal() kein fehler existiert; ist schließlich von microsoft.</p>
<p>wenn man dann sachen auskommentiert, wo man sich vorstellen könnte, dass sie fehler produzieren (dyn. speicherverwaltung, etc.), dann stürzt das programm anderswo ab.<br />
z.B. hier:</p>
<pre><code class="language-cpp">if(init) {...}
</code></pre>
<p>&lt;-- er meint init wäre ungültig, obwohl init vorher per</p>
<pre><code class="language-cpp">bool init;
init=false; //an anderer stelle
</code></pre>
<p>initialisiert wurde. den fehler zeigt er aber nur, wenn man anderes, dass nichts damit zu tun hat auskommentiert. sonst passiert nix!</p>
<p>ich glaube der fehler dreht sich um folgende sache (auch, wenn der debugger anderen müll anzeigt):</p>
<pre><code class="language-cpp">class Beispiel
{
    CString strABC;
    bool init;

}

CArray&lt;Beispiel*,Beispiel*&gt; aArray;

Beispiel* nArrayEl = new Beispiel();
aArray.Add(nArrayEl);
aArray[0].strABC = &quot;Hallo&quot;; // Alles i.O.
aArray[0].strABC = &quot;HalloHalloabc&quot;;
</code></pre>
<p>Um so ähnliche Sachen, wie die letzte Zeile scheint das Programm sich immer wieder zu killen. kann es angehen, dass strABC den nachfolgenden Speicherbereich überschreibt??<br />
Oder, dass das Array nicht genug Speicher bereitsstellt?? &lt;-- Aber das wäre doch eigentlich egal, weil ich nur ein pointer Array habe, oder???</p>
<p>Bitte, Bitte, Bitte helft mir!!!!!!!!!!! habt ihr vielleicht eine Vorstellung woher diese komische Debugger Meldung kommen kann? Nicht im Detail sondern einfach allgemein???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/364238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/364238</guid><dc:creator><![CDATA[energyzer]]></dc:creator><pubDate>Wed, 01 Oct 2003 12:29:19 GMT</pubDate></item><item><title><![CDATA[Reply to Vollkommen irrer Fehler! on Wed, 01 Oct 2003 13:46:11 GMT]]></title><description><![CDATA[<blockquote>
<p>habt ihr vielleicht eine Vorstellung woher diese komische Debugger Meldung kommen kann? Nicht im Detail sondern einfach allgemein???</p>
</blockquote>
<p>Im Prinzip ja - aber wie sag ich's meinen Chef <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>Schätz' dich glücklich - Ich hab gestern zwei Stunden 'nen Absturz gesucht der nur im Release-Build bei voller Optimierung auftrat. Was 'ne elende Sauerei. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Die üblichen verdächtigen:</p>
<ol>
<li>Du schreibst über irgendeine Allokationsgrenze drüber raus (z.B. hinter dem endfe von einem Array)</li>
<li>Du verwendest ein Objekt das schon freigegeben wurde</li>
<li>Durch einen unsauberen cast, oder einen Header-Konflikt &quot;verschiebt&quot; sich ein this- bzw. Member-zeiger</li>
<li>(selten) Du schreibst auf ein shared const Array/String</li>
</ol>
<p>Ein unsauberer Cast sieht z.B. so aus:</p>
<pre><code>class Z : public X
{
};

void * p = (void *) pZ;
pX = (X *) p;
</code></pre>
<p>Der header-Konflikt tritt üblicherweise mit Lib's auf, kann aber im schlimsmten fall auch in einem Projekt passieren: man ändert ein struct (z.B. fügt noch einen Member ein), übersetzt ein CPP mit dem alten und ein CPP mit dem neuen Header (bzw. übersetzt die LIB nicht neu). Dann haben beide Module unterschiedliche Offsets zu Datenmembern oder abgeleiteten Klassen, und schreiben Daten an die falsche Stelle.</p>
<ol>
<li>und 2) haben die lustige Eigenschaft, daß da Problem zumeist viel später und an volkommen anderer Stelle auftritt als die Ursache liegt. 3) hat den neckischen Seiteneffekt, daß sich irgendwelche Daten &quot;plötzlich&quot; ändern, ohne das sie angefaßt werden (in wirklichkeit greift das programm auf verschiedene Adressen zu).</li>
</ol>
<p>&quot;aArray[0].strABC&quot; ist bestimmt &quot;aArray[0]-&gt;strABC&quot;, und die zweite Zuweisung kann's nicht sein.</p>
<p>Mehr kann ich leider nicht sagen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/364337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/364337</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Wed, 01 Oct 2003 13:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to Vollkommen irrer Fehler! on Wed, 01 Oct 2003 13:55:30 GMT]]></title><description><![CDATA[<p>Du verwendest ein Pointer-Array und benutzt . statt -&gt; ?!?</p>
<p>EnERgYzEr schrieb:</p>
<blockquote>
<pre><code class="language-cpp">CArray&lt;Beispiel*,Beispiel*&gt; aArray;

Beispiel* nArrayEl = new Beispiel();
aArray.Add(nArrayEl);
aArray[0].strABC = &quot;Hallo&quot;; // Alles i.O.
aArray[0].strABC = &quot;HalloHalloabc&quot;;
</code></pre>
</blockquote>
<p>Mach da doch mal folgendes draus:</p>
<pre><code class="language-cpp">aArray[0]-&gt;strABC = &quot;Hallo&quot;; // Alles i.O.
aArray[0]-&gt;strABC = &quot;HalloHalloabc&quot;;
</code></pre>
<p>Wobei ich folgendes bevorzugen würde:</p>
<pre><code class="language-cpp">aArray.GetAt(0)-&gt;strAbc = &quot;HalloHalloabc&quot;;
</code></pre>
<p>Ist mir schleierhaft, warum der Compiler das nicht anmeckert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/364351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/364351</guid><dc:creator><![CDATA[estartu]]></dc:creator><pubDate>Wed, 01 Oct 2003 13:55:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vollkommen irrer Fehler! on Wed, 01 Oct 2003 14:04:06 GMT]]></title><description><![CDATA[<p>estartu_de schrieb:</p>
<blockquote>
<p>Mach da doch mal folgendes draus:</p>
<pre><code class="language-cpp">aArray[0]-&gt;strABC = &quot;Hallo&quot;; // Alles i.O.
aArray[0]-&gt;strABC = &quot;HalloHalloabc&quot;;
</code></pre>
</blockquote>
<p>das ist nur ein tippfehler...</p>
<p>in echt sieht das ganze ja ein bisschen anders aus und da verwende ich auch -&gt;</p>
<p>aber erst mal danke euch beiden!</p>
<p>durch stundenlanges auskommentieren bin ich jetzt aber hinter einer anderen sache hinterher! (wenn ich die lösung hab, werd ich mich nochmal melden)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/364359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/364359</guid><dc:creator><![CDATA[energyzer]]></dc:creator><pubDate>Wed, 01 Oct 2003 14:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Vollkommen irrer Fehler! on Wed, 01 Oct 2003 15:31:16 GMT]]></title><description><![CDATA[<p>hi!!</p>
<p>So ich hab das Problem jetzt weiter eingekreist und bin wo ganz anders gelandet:</p>
<p>ich hab ein CTreeCtrl, dass mehrere Elemente enthält. Wenn man auf das Element doppelklickt oder auf einen Bearbeiten-Button drückt wird ein Dialog aufgerufen, der das entsprechende Element bearbeitet.</p>
<p>Der oben beschriebene Fehler tritt nur auf, wenn man auf das element doppelklickt, dabei tut die funktion nichts anderes, als die button funktion aufzurufen:</p>
<pre><code class="language-cpp">void CConChildDlg::OnNMDblclkTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
	OnBnClickedEdit();

	*pResult = 0;
}
</code></pre>
<p>Nur, wenn man doppelklickt gibt es an folgender stelle in der funktion <em>OnBnClickedEdit()</em> einen fehler:</p>
<pre><code class="language-cpp">CmySQLDlg dlg(...);
if(dlg.DoModal()!=IDOK)
    return;
</code></pre>
<p>dabei wird die funktion in beiden fällen doch einfach nur aufgerufen!!!! <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="😮"
    /><br />
<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="😮"
    /> <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>
<p>Der Fehler ist sonst identisch mit dem oben beschriebenen... Also der grüne Pfeil ohne konkrete Anhaltspunkte... bis auf:</p>
<p>*HEAP[db COPY.exe]: HEAP: Free Heap block 166378 modified at 166394 after it was freed<br />
Unbehandelte Ausnahme bei 0x778a018c in db COPY.exe: Benutzerhaltepunkt.<br />
*</p>
<p><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="😕"
    /> <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="😮"
    /> <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="😕"
    /> <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>
]]></description><link>https://www.c-plusplus.net/forum/post/364452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/364452</guid><dc:creator><![CDATA[energyzer]]></dc:creator><pubDate>Wed, 01 Oct 2003 15:31:16 GMT</pubDate></item><item><title><![CDATA[Reply to Vollkommen irrer Fehler! on Thu, 02 Oct 2003 07:48:16 GMT]]></title><description><![CDATA[<p>Hallo !</p>
<p>Bei komischen Fehlern hilft manchmal (im Menü):<br />
Erstellen -&gt; Bereinigen<br />
Erstellen -&gt; Alles neu erstellen.</p>
<p>Tschüss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/364768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/364768</guid><dc:creator><![CDATA[isabeau]]></dc:creator><pubDate>Thu, 02 Oct 2003 07:48:16 GMT</pubDate></item><item><title><![CDATA[Reply to Vollkommen irrer Fehler! on Thu, 02 Oct 2003 08:21:26 GMT]]></title><description><![CDATA[<p>isabeau schrieb:</p>
<blockquote>
<p>Hallo !</p>
<p>Bei komischen Fehlern hilft manchmal (im Menü):<br />
Erstellen -&gt; Bereinigen<br />
Erstellen -&gt; Alles neu erstellen.</p>
<p>Tschüss</p>
</blockquote>
<p>das hab ich schon ein paar mal ausprobiert!</p>
<p>&lt;- hilft zwar häufig aber nicht in diesem fall</p>
]]></description><link>https://www.c-plusplus.net/forum/post/364787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/364787</guid><dc:creator><![CDATA[energyzer]]></dc:creator><pubDate>Thu, 02 Oct 2003 08:21:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vollkommen irrer Fehler! on Fri, 03 Oct 2003 19:19:02 GMT]]></title><description><![CDATA[<p>Wie sieht's denn aus?<br />
Hatte eine heftige Woche - deswegen die späte antwort.</p>
<p><em>HEAP: Free Heap block 166378 modified at 166394 after it was freed<br />
Unbehandelte Ausnahme bei 0x778a018c in db COPY.exe: Benutzerhaltepunkt</em></p>
<p>Du schreibst über eine Heap-Allokation drüber raus, wild auf dem Heap rum, oder benutzt einen schon delete'ten Zeiger.</p>
<p>Weist darauf hin, das bereits eher was passiert. Ob und wann sich der Fehler bemerkbar macht, hängt halt davion ab, was in dem Moment grad in den Registern udn auf dem Stack steht - das kann das seltsame Verhalten (mal passiert's mal nicht) recht gut erklären.</p>
<p>Die einfachste (aber teuerste) Lösung ist ein Tool wie BoundsChecker.<br />
(Tip: Für GlowCode gibt's eine Eval-version: <a href="http://www.glowcode.com" rel="nofollow">http://www.glowcode.com</a> Könnte dir schon weiterhelfen)</p>
<p>Etwas mühseliger ist es, die CRT Memory Debug - Funktionen zu verwenden.</p>
<p>Mit _CrtSetDbgFlag kann man noch einige heap Debug flags setzen: _CRTDBG_CHECK_ALWAYS_DF checkt den gesamten Heap bei jeder Allokation, das macht das programm zwar ewig langsam, aber man kommt näher an die Ursache ran.</p>
<p>Eine andere Variante ist, an ausgewählten Stellen _CrtCheckMemory selbst aufzurufen, und so den Sündenbock &quot;einzukreisen&quot;.</p>
<p>Behalt aber immer im Hinterkopf, daß die Ursache immer noch ein Stückchen vor der Fehlermeldung liegen kann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/365618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/365618</guid><dc:creator><![CDATA[peterchen]]></dc:creator><pubDate>Fri, 03 Oct 2003 19:19:02 GMT</pubDate></item></channel></rss>