<?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[Zugriffsverletzung bei delete]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bekomme immer wieder Zugriffsverletzungen, wenn ich versuche ein von mir<br />
angelegtes Array wieder zu löschen.</p>
<p>Mir ist klar, dass sowas vorkommen kann, wenn man über die Grenzen des Arrays<br />
hinaus Daten schreibt.</p>
<p>Im aktuellen Fall verwende ich aber das Array nur zum suchen, greife also nur lesend darauf zu. Trotzdem bekomm ich einen Fehler. Irgendwas mach ich falsch.<br />
Kann mir jemand sagen was?</p>
<pre><code>int GetInfo(void)
{
    int cMask [] = {
        0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
        0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x11, 0x22,
        -2
    };

    int iFound=-1;
    int iFoundCount=0;

    MaskSearch(cBINFile, iBINFileSize, cMask, iFound, iFoundCount);
    ShowMessage(iFoundCount);
    delete cMask;   // hier kommt der Fehler, delete [] cMask; hab ich auch 
                    // versucht
    return iFound;
}
</code></pre>
<p>die MaskSearch Routine gibt es hier: <a href="http://www.gsm-dev.de/MaskSearch.cpp" rel="nofollow">http://www.gsm-dev.de/MaskSearch.cpp</a><br />
ich wär wirklich dankbar wenn jemand eine Idee hat an was das liegen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/85995/zugriffsverletzung-bei-delete</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 14:38:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/85995.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Sep 2004 17:25:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriffsverletzung bei delete on Tue, 14 Sep 2004 17:25:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bekomme immer wieder Zugriffsverletzungen, wenn ich versuche ein von mir<br />
angelegtes Array wieder zu löschen.</p>
<p>Mir ist klar, dass sowas vorkommen kann, wenn man über die Grenzen des Arrays<br />
hinaus Daten schreibt.</p>
<p>Im aktuellen Fall verwende ich aber das Array nur zum suchen, greife also nur lesend darauf zu. Trotzdem bekomm ich einen Fehler. Irgendwas mach ich falsch.<br />
Kann mir jemand sagen was?</p>
<pre><code>int GetInfo(void)
{
    int cMask [] = {
        0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99,
        0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x11, 0x22,
        -2
    };

    int iFound=-1;
    int iFoundCount=0;

    MaskSearch(cBINFile, iBINFileSize, cMask, iFound, iFoundCount);
    ShowMessage(iFoundCount);
    delete cMask;   // hier kommt der Fehler, delete [] cMask; hab ich auch 
                    // versucht
    return iFound;
}
</code></pre>
<p>die MaskSearch Routine gibt es hier: <a href="http://www.gsm-dev.de/MaskSearch.cpp" rel="nofollow">http://www.gsm-dev.de/MaskSearch.cpp</a><br />
ich wär wirklich dankbar wenn jemand eine Idee hat an was das liegen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607195</guid><dc:creator><![CDATA[Acidmrp]]></dc:creator><pubDate>Tue, 14 Sep 2004 17:25:34 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei delete on Tue, 14 Sep 2004 17:48:49 GMT]]></title><description><![CDATA[<p>Soviel ich weiss kann man delete nur auf Variablen anwenden, die mit new erzeugt wurden.</p>
<p>Wenn ich nicht irgendwas übersehen habe erzeugst du dein Array ja im stack und nicht im heap, brauchst es also nicht mit delete freigeben bzw. musst es im heap mit new erzeugen.</p>
<p>Auf ein Array musst du dann delete[] verwenden!</p>
<p>ciao</p>
<p>robi1806</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607222</guid><dc:creator><![CDATA[robi1806]]></dc:creator><pubDate>Tue, 14 Sep 2004 17:48:49 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei delete on Tue, 14 Sep 2004 18:21:06 GMT]]></title><description><![CDATA[<p>Für delete[] gilte das gleiche wie für delete! Also da das Array hier auf dem Stack erzeugt wird und dazu noch in einer Funktion, gilt das Array sowieso nur so lange wie sich der Compiler in der Funktion befindet. Ergo wird das Array automatisch mit verlassen der Funktion zerstört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607264</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Tue, 14 Sep 2004 18:21:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei delete on Tue, 14 Sep 2004 20:21:22 GMT]]></title><description><![CDATA[<p>danke! Jetzt wird einiges klar.</p>
<p>Zwei Fragen hab ich aber noch:<br />
- wenn ich in einer Funktion Speicher mit new reserviere muss ich den aber<br />
schon löschen oder?</p>
<p>- gibt es eine Möglichkeit ein Array mit new zu reservieren und dieses dann<br />
ähnlich wie oben mit Werten zu füllen? Ich glaube zwar nicht aber evtl.<br />
geht es ja doch irgendwie...</p>
<p>also z.B. so:<br />
char * cData = new char[10];<br />
cData = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};</p>
<p>sowas wäre wirklich unheimlich praktisch...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607350</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607350</guid><dc:creator><![CDATA[Acidmrp]]></dc:creator><pubDate>Tue, 14 Sep 2004 20:21:22 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei delete on Tue, 14 Sep 2004 22:43:28 GMT]]></title><description><![CDATA[<pre><code>double[] number = new double[5]{ 12.44, 525.38, 6.28, 2448.32, 632.04 };
</code></pre>
<p>schon so probiert? In C# ginge das.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607441</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607441</guid><dc:creator><![CDATA[robi1806]]></dc:creator><pubDate>Tue, 14 Sep 2004 22:43:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei delete on Wed, 15 Sep 2004 06:34:29 GMT]]></title><description><![CDATA[<p>Grundsatz für new/delete:</p>
<p>Egal wann und wo du new oder new[] aufrufst, musst du auch dafür sorgen das delete oder delete[] aufgerufen wird. Reservierst du in einer Funktion mit new[] Speicher und gibst diesen aber NICHT frei, dann hast du ein Speicherleck! Und wer will schon ein Speicherleck? Also musst du in der Funktion zu dem Zeitpunkt wo der Speicher nicht mehr benötigt wird das delete[] aufrufen.</p>
<p>Und das was robi vorgeschlagen hat funktioniert in C++ so nicht.</p>
<p>Was hingegen möglich ist wäre folgendes:</p>
<pre><code class="language-cpp">int array[] = {0,1,2,3,4};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/607496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607496</guid><dc:creator><![CDATA[PuppetMaster2k]]></dc:creator><pubDate>Wed, 15 Sep 2004 06:34:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei delete on Wed, 15 Sep 2004 09:00:53 GMT]]></title><description><![CDATA[<p>Ok, aber damit hat er's ja wieder im stack.<br />
Die Frage ist doch: Gibt es unter c++ einen Möglichkeit direkt zu initialisieren, auch wenn man im heap allokiert bzw. new verwendet?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607616</guid><dc:creator><![CDATA[robi1806]]></dc:creator><pubDate>Wed, 15 Sep 2004 09:00:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei delete on Wed, 15 Sep 2004 09:59:23 GMT]]></title><description><![CDATA[<p>Memset z.B.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/607655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/607655</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Wed, 15 Sep 2004 09:59:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei delete on Thu, 16 Sep 2004 14:57:37 GMT]]></title><description><![CDATA[<p>Ich hätte da auch nochmal eine Frage zu new und delete.</p>
<blockquote>
<p>Egal wann und wo du new oder new[] aufrufst, musst du auch dafür sorgen das delete oder delete[]</p>
</blockquote>
<p>Was mach ich denn wenn ich in einer Funktion beispilsweise eine TStringList mit new anlege, diese aber als Rückgabewert an die aufrufende Funktion zurückgeben will ?</p>
<p>Wo muss oder besser sollte ich die dann erzeugen bzw. wieder deleten um keine memleacks zu bekommen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/608428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/608428</guid><dc:creator><![CDATA[Fox-Alpha]]></dc:creator><pubDate>Thu, 16 Sep 2004 14:57:37 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung bei delete on Thu, 16 Sep 2004 15:10:25 GMT]]></title><description><![CDATA[<p>Nachdem du sie nicht mehr brauchst?</p>
<p>Funktionen die reservierten Speicher zurückgeben den dann der aufrufende löschen muss sind ohnehin nicht sehr optimal. Besser wäre es hier ein TStringList-Objekt als Referenz oder Zeiger zu verlangen, welches dann von der Funktion befüllt wird. Da behält dann auch der Aufrufende die Kontrolle über die Erstellung und Ermordung des Objekts.</p>
<p>-junix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/608440</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/608440</guid><dc:creator><![CDATA[junix]]></dc:creator><pubDate>Thu, 16 Sep 2004 15:10:25 GMT</pubDate></item></channel></rss>