<?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[Access Violations in API-Funktionen]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe folgendes Problem:<br />
Habe hier ein Programm, welches über den Com-Port mit einem Gerät kommuniziert. Es gibt einen Thread, welcher immer den Com-Port pollt und bei Eingang eines Datenpakets dieses aufbereitet und per Windows-Nachricht verschickt.</p>
<p>Betreibe ich das Ganze auf dem Computer, wo das Projekt erstellt wurde, und an einem ComPort, welcher im Computer eingebaut ist (z.B. Com1) geht es absolut fehlerfrei. Gehe ich jedoch mit dem Programm auf einen schnelleren Computer, oder schließe das externe Gerät mit einem USB&lt;-&gt;RS232-Converter an, stürzt es ab. Sporadisch, nicht reproduzierbar.</p>
<p>Habe schon einiges ausprobiert, u.a. Evaluation-Versionen von Rational Purify, Insure++, Memory Validator. Diese Tools finden &quot;nichts&quot;.</p>
<h1>Insure++ findet in der &quot;funktionierenden&quot; Konfiguration einen Haufen von scheinbar unwichtigen Sachen, hier das Log nach dem Ausführen des Programms:<br />
--------<br />
************************* INSURE SUMMARY ************************ v6.1.3 **<br />
(...)<br />
***************************************************************************<br />
PROBLEM SUMMARY - by type</h1>
<p>Problem Reported Suppressed<br />
-------------------------------------------------<br />
FREE_NULL 0 2<br />
RETURN_FAILURE 0 2102<br />
-------------------------------------------------<br />
TOTAL 0 2104<br />
-------------------------------------------------<br />
-----------------------------</p>
<p>Zur Laufzeit werden keine Fehler angezeigt, und in den &quot;nichtfunktionierenden&quot; Konfigurationen komme ich halt nicht zu dem Punkt, wo diese Summary angezeigt wird. Schaut man sich die scheinbaren Fehler im Quellcode an, findet man nichts ungewöhnliches!</p>
<p>Das Programm stürzt jedoch immer mit dieser &quot;Access Violation&quot; ab, welche ja darauf hinweist, daß ein uninitialisierter Zeiger o.ä. verwendet/gelöscht/etc. wird. In dieser Richtung suche ich nun schon geraume Zeit, kann aber nix finden!</p>
<p>Die Stellen an denen der Compiler nach Auftreten des Fehlers stehen bleibt, sind z.B.:<br />
//in Datei DOCMULTI.CPP</p>
<p>void CMultiDocTemplate::AssertValid() const<br />
{<br />
CDocTemplate::AssertValid();</p>
<p>POSITION pos = GetFirstDocPosition(); //&lt;&lt;&lt;--hier bleibt der Debugger stehen<br />
while (pos != NULL)<br />
{<br />
CDocument* pDoc = GetNextDoc(pos);<br />
ASSERT_VALID(pDoc);<br />
}<br />
}</p>
<p>...oder manchmal auf direkt bei Adresse 5:<br />
00000000 ???<br />
00000001 ???<br />
00000002 ???<br />
00000003 ???<br />
00000004 ???<br />
00000005 ???<br />
00000006 ???</p>
<p>und hin und wieder auch an anderen Stellen...</p>
<p>Schaut man in den Callstack, stehen als aufrufende Funktionen nur Windows-eigene drin, z.B. für das erste der Beispiele:<br />
----------<br />
CMultiDocTemplate::AssertValid() line 220 + 3 bytes<br />
AfxAssertValidObject(const CObject * 0x01244fd0 {CMultiDocTemplate}, const char * 0x00639abc THIS_FILE, int 852) line 108<br />
CDocManager::AssertValid() line 853<br />
AfxAssertValidObject(const CObject * 0x01242ed0 {CDocManager}, const char * 0x00634b1c THIS_FILE, int 551) line 108<br />
CWinApp::AssertValid() line 552<br />
AfxAssertValidObject(const CObject * 0x006463e8 class CFMMApp FMMMain, const char * 0x00634ed4 THIS_FILE, int 537) line 108<br />
CWinThread::OnIdle(long 1) line 541<br />
CWinApp::OnIdle(long 1) line 492 + 12 bytes<br />
CWinThread::Run() line 479 + 30 bytes<br />
CWinApp::Run() line 400<br />
AfxWinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00132fb1, int 1) line 49 + 11 bytes<br />
WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00132fb1, int 1) line 30<br />
WinMainCRTStartup() line 198 + 54 bytes<br />
KERNEL32! 77e81af6()</p>
<p>----------</p>
<p>Vielleicht sollte ich noch etwas weiter ausholen, um das Programm etwas mehr zu beschreiben (Sorry für das lange Posting...):<br />
Es besteht aus einigen FormViews, welche mit &quot;OpenNewChildWindow&quot; erzeugt bzw. angezeigt werden. Wie bereits gesagt gibt es einen Thread, der Nachrichten an die FormViews verschickt, diverse Daten werden hier dann noch verarbeitet bzw. angezeigt.</p>
<p>Aufgrund der Tatsache, daß die Abstürze in Windows- bzw. MFC-Funktionen stattfinden, glaube ich das mit diesem FormView-Zeug irgendwas nicht stimmt, bisher hatte ich daran gedacht, daß mit den Nachrichten irgendwas nicht funktioniert. Habe aber trotz unendlich langer Suche nix entsprechendes gefunden <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>Kann es sein, daß die FormViews falsch instanziiert sind und das dies den Fehler verursacht ?</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Falls irgendjemand einen Tip, Hinweis, eine idee, oder was auch immer hat, ich bin für alles dankbar, bin kurz vorm verzweifeln (...eigentlich bin ich schon verzweifelt...)</p>
<p>Danke schonmal und Gruß,</p>
<p>pk</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/74900/access-violations-in-api-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 25 Apr 2026 23:21:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/74900.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 25 May 2004 14:38:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Access Violations in API-Funktionen on Tue, 25 May 2004 14:38:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe folgendes Problem:<br />
Habe hier ein Programm, welches über den Com-Port mit einem Gerät kommuniziert. Es gibt einen Thread, welcher immer den Com-Port pollt und bei Eingang eines Datenpakets dieses aufbereitet und per Windows-Nachricht verschickt.</p>
<p>Betreibe ich das Ganze auf dem Computer, wo das Projekt erstellt wurde, und an einem ComPort, welcher im Computer eingebaut ist (z.B. Com1) geht es absolut fehlerfrei. Gehe ich jedoch mit dem Programm auf einen schnelleren Computer, oder schließe das externe Gerät mit einem USB&lt;-&gt;RS232-Converter an, stürzt es ab. Sporadisch, nicht reproduzierbar.</p>
<p>Habe schon einiges ausprobiert, u.a. Evaluation-Versionen von Rational Purify, Insure++, Memory Validator. Diese Tools finden &quot;nichts&quot;.</p>
<h1>Insure++ findet in der &quot;funktionierenden&quot; Konfiguration einen Haufen von scheinbar unwichtigen Sachen, hier das Log nach dem Ausführen des Programms:<br />
--------<br />
************************* INSURE SUMMARY ************************ v6.1.3 **<br />
(...)<br />
***************************************************************************<br />
PROBLEM SUMMARY - by type</h1>
<p>Problem Reported Suppressed<br />
-------------------------------------------------<br />
FREE_NULL 0 2<br />
RETURN_FAILURE 0 2102<br />
-------------------------------------------------<br />
TOTAL 0 2104<br />
-------------------------------------------------<br />
-----------------------------</p>
<p>Zur Laufzeit werden keine Fehler angezeigt, und in den &quot;nichtfunktionierenden&quot; Konfigurationen komme ich halt nicht zu dem Punkt, wo diese Summary angezeigt wird. Schaut man sich die scheinbaren Fehler im Quellcode an, findet man nichts ungewöhnliches!</p>
<p>Das Programm stürzt jedoch immer mit dieser &quot;Access Violation&quot; ab, welche ja darauf hinweist, daß ein uninitialisierter Zeiger o.ä. verwendet/gelöscht/etc. wird. In dieser Richtung suche ich nun schon geraume Zeit, kann aber nix finden!</p>
<p>Die Stellen an denen der Compiler nach Auftreten des Fehlers stehen bleibt, sind z.B.:<br />
//in Datei DOCMULTI.CPP</p>
<p>void CMultiDocTemplate::AssertValid() const<br />
{<br />
CDocTemplate::AssertValid();</p>
<p>POSITION pos = GetFirstDocPosition(); //&lt;&lt;&lt;--hier bleibt der Debugger stehen<br />
while (pos != NULL)<br />
{<br />
CDocument* pDoc = GetNextDoc(pos);<br />
ASSERT_VALID(pDoc);<br />
}<br />
}</p>
<p>...oder manchmal auf direkt bei Adresse 5:<br />
00000000 ???<br />
00000001 ???<br />
00000002 ???<br />
00000003 ???<br />
00000004 ???<br />
00000005 ???<br />
00000006 ???</p>
<p>und hin und wieder auch an anderen Stellen...</p>
<p>Schaut man in den Callstack, stehen als aufrufende Funktionen nur Windows-eigene drin, z.B. für das erste der Beispiele:<br />
----------<br />
CMultiDocTemplate::AssertValid() line 220 + 3 bytes<br />
AfxAssertValidObject(const CObject * 0x01244fd0 {CMultiDocTemplate}, const char * 0x00639abc THIS_FILE, int 852) line 108<br />
CDocManager::AssertValid() line 853<br />
AfxAssertValidObject(const CObject * 0x01242ed0 {CDocManager}, const char * 0x00634b1c THIS_FILE, int 551) line 108<br />
CWinApp::AssertValid() line 552<br />
AfxAssertValidObject(const CObject * 0x006463e8 class CFMMApp FMMMain, const char * 0x00634ed4 THIS_FILE, int 537) line 108<br />
CWinThread::OnIdle(long 1) line 541<br />
CWinApp::OnIdle(long 1) line 492 + 12 bytes<br />
CWinThread::Run() line 479 + 30 bytes<br />
CWinApp::Run() line 400<br />
AfxWinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00132fb1, int 1) line 49 + 11 bytes<br />
WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00132fb1, int 1) line 30<br />
WinMainCRTStartup() line 198 + 54 bytes<br />
KERNEL32! 77e81af6()</p>
<p>----------</p>
<p>Vielleicht sollte ich noch etwas weiter ausholen, um das Programm etwas mehr zu beschreiben (Sorry für das lange Posting...):<br />
Es besteht aus einigen FormViews, welche mit &quot;OpenNewChildWindow&quot; erzeugt bzw. angezeigt werden. Wie bereits gesagt gibt es einen Thread, der Nachrichten an die FormViews verschickt, diverse Daten werden hier dann noch verarbeitet bzw. angezeigt.</p>
<p>Aufgrund der Tatsache, daß die Abstürze in Windows- bzw. MFC-Funktionen stattfinden, glaube ich das mit diesem FormView-Zeug irgendwas nicht stimmt, bisher hatte ich daran gedacht, daß mit den Nachrichten irgendwas nicht funktioniert. Habe aber trotz unendlich langer Suche nix entsprechendes gefunden <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>Kann es sein, daß die FormViews falsch instanziiert sind und das dies den Fehler verursacht ?</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Falls irgendjemand einen Tip, Hinweis, eine idee, oder was auch immer hat, ich bin für alles dankbar, bin kurz vorm verzweifeln (...eigentlich bin ich schon verzweifelt...)</p>
<p>Danke schonmal und Gruß,</p>
<p>pk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/527040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/527040</guid><dc:creator><![CDATA[pk117]]></dc:creator><pubDate>Tue, 25 May 2004 14:38:58 GMT</pubDate></item></channel></rss>