<?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[Debug:kein Fehler, Release:Fehler,Release(DebugInfo aktiv): kein Fehler]]></title><description><![CDATA[<p>Hi Leute,<br />
ich hab ein Problem mit meinem Programm:</p>
<p>Im Debug-Modus -&gt; *kein Fehler<br />
Im Release-Modus -&gt; *Fehlermeldung mit malloc (hab ihn mühselig im Code mit<br />
cout ausfindig gemacht)<br />
*keine Fehlermeldung mit new<br />
*Programmdatenbank aktivieren (also debuggen im Release-<br />
Modus): keine Fehlermeldung</p>
<p>Weiteres Problem: Wenn ich im Release-Modus debugge, kann ich im Hauptprogramm Haltepunkte setzen, aber dann nicht in einen Aufruf springen (in andere Quellcodedatei, hab Pfade der include's gesetzt.</p>
<p>Habt ihr ne Ahnung? Ist vielleicht malloc fehlerhaft???</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/66810/debug-kein-fehler-release-fehler-release-debuginfo-aktiv-kein-fehler</link><generator>RSS for Node</generator><lastBuildDate>Sat, 06 Jun 2026 01:54:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/66810.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Mar 2004 18:31:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Debug:kein Fehler, Release:Fehler,Release(DebugInfo aktiv): kein Fehler on Tue, 02 Mar 2004 18:31:36 GMT]]></title><description><![CDATA[<p>Hi Leute,<br />
ich hab ein Problem mit meinem Programm:</p>
<p>Im Debug-Modus -&gt; *kein Fehler<br />
Im Release-Modus -&gt; *Fehlermeldung mit malloc (hab ihn mühselig im Code mit<br />
cout ausfindig gemacht)<br />
*keine Fehlermeldung mit new<br />
*Programmdatenbank aktivieren (also debuggen im Release-<br />
Modus): keine Fehlermeldung</p>
<p>Weiteres Problem: Wenn ich im Release-Modus debugge, kann ich im Hauptprogramm Haltepunkte setzen, aber dann nicht in einen Aufruf springen (in andere Quellcodedatei, hab Pfade der include's gesetzt.</p>
<p>Habt ihr ne Ahnung? Ist vielleicht malloc fehlerhaft???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/471882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/471882</guid><dc:creator><![CDATA[ga_un]]></dc:creator><pubDate>Tue, 02 Mar 2004 18:31:36 GMT</pubDate></item><item><title><![CDATA[Reply to Debug:kein Fehler, Release:Fehler,Release(DebugInfo aktiv): kein Fehler on Tue, 02 Mar 2004 19:04:17 GMT]]></title><description><![CDATA[<p>ga_un schrieb:</p>
<blockquote>
<p>Hi Leute,<br />
ich hab ein Problem mit meinem Programm:</p>
<p>Im Debug-Modus -&gt; *kein Fehler<br />
Im Release-Modus -&gt; *Fehlermeldung mit malloc (hab ihn mühselig im Code mit<br />
cout ausfindig gemacht)<br />
*keine Fehlermeldung mit new<br />
*Programmdatenbank aktivieren (also debuggen im Release-<br />
Modus): keine Fehlermeldung</p>
<p>Weiteres Problem: Wenn ich im Release-Modus debugge, kann ich im Hauptprogramm Haltepunkte setzen, aber dann nicht in einen Aufruf springen (in andere Quellcodedatei, hab Pfade der include's gesetzt.</p>
<p>Habt ihr ne Ahnung? Ist vielleicht malloc fehlerhaft???</p>
</blockquote>
<p>in den aufruf kannste evtl nicht springen, weil die funktion inline ist.<br />
kannste testhalber ja mal ausschalten, um besser debuggen zu können.<br />
der fehler liegt bestimmt nicht in malloc.<br />
es könnte unter umständen so gelaufen sein:</p>
<pre><code class="language-cpp">char* a=malloc(10);
a[-1]='x';
char* b=malloc(10);
</code></pre>
<p>das erste malloc hat sich speicher vom betriebssystem geholt, sagen wir mal 64k und den zerlegt in zwei portionen. nämlich 10 bytes für dich und den rest.<br />
na, eigentlich eher 18 bytes für dich , 8 bytes steuerinformation für den abgespaltenen kleinen block und 10 bytes nutzinhalt, den du kriegst. das macht man zum beispiel so, daß man, wenn 10 bytes anfordert, daß malloc in seiner liste such, obs irgendeinen block gibt, der größergleich als 18 bytes ist. jo, den mit 64 ka findet er. dann nimmt er die ersten 18 bytes und schreibt am anfang und am ende die zahl 18 rein. sieht dann so aus:<br />
|18|10 bytes|18|<br />
und den großen rerst behandelt er auch noch.<br />
|18|10 bytes|18|65510|65518 bytes|65518|<br />
wenn diese daten so rumliegen, können malloc und free damit allerhand anfangen.<br />
du hast als ergebnis von malloc die anfangsadresse der 10 bytes gekriegt.<br />
a) man kann von vorn bis hinten oder von hinten bis vorn durch die liste gehen. man weiß ja immer, wo der nächste block beginnt. einfach soweit springen, wie die zahl da sagt.<br />
b) man kann prima freigegebene blöcke mit nachbarn verschmelzen.<br />
nimm an, du rufst wieder free auf mit zeiger auf die 10 bytes. free geht 4 bytes zurück und findet da ne 18 stehen. dann geht free 18 bytes vor und sieht nen anderen block, der 65518 bytes groß ist. ups, hab vergessen, daß malloc/free sich auch merken sollten, ob ein block belegt ist. mal angenommen, das haben sie. free sieht, daß der nachbarblock auch frei ist und verschmilz die beiden. es entsteht:<br />
|65536|65518 bytes|65536|<br />
und free schaut sich natürlich auch gleich den nachbarblock an, ob der auch frei ist... und so weiter...</p>
<p>aber oh weh! was passiert denn, wenn du schelm in den speicher müll reinschreibst?</p>
<p>als die welt noch ok war...<br />
|18|10 bytes|18|65510|65518 bytes|65518|<br />
und du gemacht hast<br />
a[-1]='x'<br />
da entstand<br />
|120|10 bytes|18|65510|65518 bytes|65518|<br />
naja, dann viel spaß. wenn free hier versucht, was freizugeben, dann crasht es aber.<br />
auch malloc könnte versuchen, durch die liste zu gehen und wegen der 120 dort echt ins nirwana rennen.</p>
<p>und die moral von der geschicht: malloc ist es nicht.<br />
die schuld liegt bestimmt in ner indexgrenzenüberschreitung irgendwo in deinem programm. und damit meine ich wirklich &quot;irgendwo&quot;. hier ist debuggen jetzt leider glückssache und unerquicklick.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/471920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/471920</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 02 Mar 2004 19:04:17 GMT</pubDate></item><item><title><![CDATA[Reply to Debug:kein Fehler, Release:Fehler,Release(DebugInfo aktiv): kein Fehler on Tue, 02 Mar 2004 19:34:52 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>danke für die Message.<br />
Kann es auch sein, das im Default-Konstruktor eines bestimmten Objekts, das ich benutze, eine Variable nicht initialisiert worden ist?</p>
<p>ciao</p>
]]></description><link>https://www.c-plusplus.net/forum/post/471963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/471963</guid><dc:creator><![CDATA[ga_un]]></dc:creator><pubDate>Tue, 02 Mar 2004 19:34:52 GMT</pubDate></item><item><title><![CDATA[Reply to Debug:kein Fehler, Release:Fehler,Release(DebugInfo aktiv): kein Fehler on Tue, 02 Mar 2004 20:01:55 GMT]]></title><description><![CDATA[<p>ga_un schrieb:</p>
<blockquote>
<p>Hallo,<br />
danke für die Message.<br />
Kann es auch sein, das im Default-Konstruktor eines bestimmten Objekts, das ich benutze, eine Variable nicht initialisiert worden ist?<br />
ciao</p>
</blockquote>
<p>ja.<br />
im debugmodus wied sie auf 0xcdcdcdcd gesetzt, im releasemodus bleibt sie uninitialisiert.<br />
ist das objekt ein auto-objekt, wird der wert davon abhängen, was vorher gemacht wurde. kann gemein sein.</p>
<pre><code class="language-cpp">int arr[1];
arr[1]=4711;
{for(int i=0;i&lt;100;++i)
{
}}
int a;
cout&lt;&lt;a&lt;&lt;endl;
</code></pre>
<p>gibt im debug-mode cirka -850000000 aus. (0xcdcdcdcd).<br />
im releasmode ohne optimierung vermutlich 100, mämlich den alten wert von i. der speicher, den damals i ainnahm, nimmt jetzt a ein.<br />
mit optimierung vermutlich 4711, nämlich arr[1] (liegt ja außerhalb des indexbereichs);. die ganze schleife mit i wurde wegoptimiert.</p>
<p>bei dickeren sachen kann es auch nen unterschied machen, wieviele debug-informationen in die exe reingelinkt worden sind.</p>
<p>weiterhin viel glück bei der suche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/471989</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/471989</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 02 Mar 2004 20:01:55 GMT</pubDate></item><item><title><![CDATA[Reply to Debug:kein Fehler, Release:Fehler,Release(DebugInfo aktiv): kein Fehler on Wed, 03 Mar 2004 09:22:59 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann mich die Fehlersuche mit cout bzw. MessageBox auch in die Irre führen? Irgendwie kommt die Fehlermeldung im Release-Modus beim überladenen operator= Datentyp string.</p>
<pre><code class="language-cpp">class Klasse
{
private:
string m_sString;
int    m_iWert;
public:
Klasse();
~Klasse();
Klasse&amp; operator=(Klasse &amp;a_cKlasse);
};
//...
Klasse&amp;
Klasse::operator=(Klasse &amp;a_cKlasse){
 m_iWert   = a_cKlasse.m_iWert;
 m_sString = a_cKlasse.m_sString; // Fehlermeldung an dieser Stelle: Der Vorgang &quot;read&quot; konnte nicht auf dem Speicher durchgeführt werden
}
</code></pre>
<p>Liegt es jetzt an m_sString (m_sString.assign(a_cKlasse.m_sString): gleicher Fehler) oder doch mit nicht korrekt freigegebenen Ressourcen???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/472250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/472250</guid><dc:creator><![CDATA[ga_un]]></dc:creator><pubDate>Wed, 03 Mar 2004 09:22:59 GMT</pubDate></item><item><title><![CDATA[Reply to Debug:kein Fehler, Release:Fehler,Release(DebugInfo aktiv): kein Fehler on Wed, 03 Mar 2004 10:28:15 GMT]]></title><description><![CDATA[<p>ga_un schrieb:</p>
<blockquote>
<p>Hallo,<br />
kann mich die Fehlersuche mit cout bzw. MessageBox auch in die Irre führen? Irgendwie kommt die Fehlermeldung im Release-Modus beim überladenen operator= Datentyp string.</p>
</blockquote>
<p>fehler in der stringausgabe hab ich am häufiogsten gesehen, wenn das den string enthaltende objekt NULL war.</p>
<pre><code class="language-cpp">Klasse&amp; Klasse::operator=(Klasse &amp;a_cKlasse){
 cout&lt;&lt;&quot;ausgabestring liegt an adresse &quot;&lt;&lt;&amp;a_cKlasse&lt;&lt;endl;
 m_iWert   = a_cKlasse.m_iWert;
 m_sString = a_cKlasse.m_sString; // Fehlermeldung an dieser Stelle: Der Vorgang &quot;read&quot; konnte nicht auf dem Speicher durchgeführt werden
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/472296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/472296</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 03 Mar 2004 10:28:15 GMT</pubDate></item><item><title><![CDATA[Reply to Debug:kein Fehler, Release:Fehler,Release(DebugInfo aktiv): kein Fehler on Wed, 03 Mar 2004 10:37:12 GMT]]></title><description><![CDATA[<p>Hallo,<br />
meine main sieht ungefähr so aus!<br />
Mit malloc kommt im Release-Modus die Fehlermeldung,<br />
mit new nicht?!</p>
<pre><code class="language-cpp">int main()
{
	Klasse* t_cTest1=(Klasse*)malloc(sizeof(Klasse)*20);
	Klasse* t_cTest=(Klasse*)malloc(sizeof(Klasse)*20);
	//Klasse* t_cTest1 = new Klasse[20];
	//Klasse* t_cTest = new Klasse[20];

	for(int i=0;i&lt;20;++i){
		t_cTest1[i]= t_cTest[i]; // springt in operator= -&gt; Fehlermeldung
	}
	if(t_cTest1){
		free(t_cTest1);
		//delete [] t_cTest1;
		t_cTest1 = NULL;
	}
	if(t_cTest){
		free(t_cTest);
		//delete [] t_cTest;
		t_cTest = NULL;
	}

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/472308</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/472308</guid><dc:creator><![CDATA[ga_un]]></dc:creator><pubDate>Wed, 03 Mar 2004 10:37:12 GMT</pubDate></item><item><title><![CDATA[Reply to Debug:kein Fehler, Release:Fehler,Release(DebugInfo aktiv): kein Fehler on Wed, 03 Mar 2004 10:48:55 GMT]]></title><description><![CDATA[<p>Im Forum C++ hab ich so ein ähnliches Programm geschrieben.<br />
Mit new/delete wird neben Speicherplatzreservierung der Konstruktor aufgerufen, mit malloc wird nur Speicherplatz reserviert.</p>
<p>malloc sollte wohl in C++ für Objekte nicht verwendet werden, oder??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/472323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/472323</guid><dc:creator><![CDATA[ga_un]]></dc:creator><pubDate>Wed, 03 Mar 2004 10:48:55 GMT</pubDate></item><item><title><![CDATA[Reply to Debug:kein Fehler, Release:Fehler,Release(DebugInfo aktiv): kein Fehler on Wed, 03 Mar 2004 11:09:46 GMT]]></title><description><![CDATA[<p>ga_un schrieb:</p>
<blockquote>
<p>Im Forum C++ hab ich so ein ähnliches Programm geschrieben.<br />
Mit new/delete wird neben Speicherplatzreservierung der Konstruktor aufgerufen, mit malloc wird nur Speicherplatz reserviert.<br />
malloc sollte wohl in C++ für Objekte nicht verwendet werden, oder??</p>
</blockquote>
<p>korrekt.<br />
ich hab angenommen, du verwendest malloc nur da, wo man es verwenden darf, und es sei ein schwer zu findender fehler.<br />
wenn du einfach konstruktoren nicht aufgerufen hast, isses klar. deine main() hat ganz klar den fehler, daß konstruktoren nicht aufgerufen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/472346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/472346</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 03 Mar 2004 11:09:46 GMT</pubDate></item></channel></rss>