<?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[Unerwarteter Programmablauf]]></title><description><![CDATA[<p>Hallo Forenmitglieder,</p>
<p>kennt ihr total unlogische Handlungen beim Ablauf von euren Programmen?</p>
<p>Solche Konstellationen sind mir bisher schon einige Male passiert; jedoch nicht in so einem großen Programm wie jetzt.</p>
<p>Die letzten Male konnte ich Teile noch einmal neu schreiben um die Fehler zu &quot;korrigieren&quot;, jedoch konnte ich ihnen bisher nie auf den Grund gehen.</p>
<p>Jetzt stehe ich vor der Konstellation, dass ich ein Verzeichnis öffne, die enthaltenen Dateien durchsuche und im Anschluss das directory-handle mit closedir() wieder schließe.</p>
<p>Irgendwann später (in einem komplett anderen Kontext) werden Kindprozesse gestartet und Pipes erstellt, die zur Kommunikation dienen.</p>
<p>Wenn closedir() aufgerufen wurde, habe ich Probleme mit dem Auslesen der pipe des ersten Kindprozesses. (Obwohl die ja erst danach erzeugt wurde, so besteht nicht einmal die Möglichkeit, dass ich da zufällig einen falschen Pointer reinwerfe o.ä).<br />
Lasse ich closedir() weg, funktioniert alles prima wie gehabt.</p>
<p>Allerdings kann es meiner Meinung nach nicht die Lösung sein, closedir() einfach wegzulassen.<br />
Offensichtlich haue ich irgendwo im Programm irgendwelche Speichersegmente über den Haufen. Die Auswirkungen davon sehe ich jetzt beim closedir()-Aufruf.<br />
Lasse ich das so stehen, kommt in einer ganz anderen Konstellation ein komisches Verhalten ans Licht.</p>
<p>Helfen könntet ihr mir mit Erfahrungsberichten, wie ihr mit solchen Fehlern umgeht, sie eingrenzt &amp; identifiziert.</p>
<p>Oder gibt es eventuell Tools, die das Speicherhandling beobachten (Gibt ja diverse Memory-Leakcheck Tools) und so automatisiert solche Fehler identifizieren können?</p>
<p>Vielen Dank für eure Mühe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/235143/unerwarteter-programmablauf</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 07:17:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235143.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Feb 2009 09:48:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unerwarteter Programmablauf on Thu, 26 Feb 2009 09:48:02 GMT]]></title><description><![CDATA[<p>Hallo Forenmitglieder,</p>
<p>kennt ihr total unlogische Handlungen beim Ablauf von euren Programmen?</p>
<p>Solche Konstellationen sind mir bisher schon einige Male passiert; jedoch nicht in so einem großen Programm wie jetzt.</p>
<p>Die letzten Male konnte ich Teile noch einmal neu schreiben um die Fehler zu &quot;korrigieren&quot;, jedoch konnte ich ihnen bisher nie auf den Grund gehen.</p>
<p>Jetzt stehe ich vor der Konstellation, dass ich ein Verzeichnis öffne, die enthaltenen Dateien durchsuche und im Anschluss das directory-handle mit closedir() wieder schließe.</p>
<p>Irgendwann später (in einem komplett anderen Kontext) werden Kindprozesse gestartet und Pipes erstellt, die zur Kommunikation dienen.</p>
<p>Wenn closedir() aufgerufen wurde, habe ich Probleme mit dem Auslesen der pipe des ersten Kindprozesses. (Obwohl die ja erst danach erzeugt wurde, so besteht nicht einmal die Möglichkeit, dass ich da zufällig einen falschen Pointer reinwerfe o.ä).<br />
Lasse ich closedir() weg, funktioniert alles prima wie gehabt.</p>
<p>Allerdings kann es meiner Meinung nach nicht die Lösung sein, closedir() einfach wegzulassen.<br />
Offensichtlich haue ich irgendwo im Programm irgendwelche Speichersegmente über den Haufen. Die Auswirkungen davon sehe ich jetzt beim closedir()-Aufruf.<br />
Lasse ich das so stehen, kommt in einer ganz anderen Konstellation ein komisches Verhalten ans Licht.</p>
<p>Helfen könntet ihr mir mit Erfahrungsberichten, wie ihr mit solchen Fehlern umgeht, sie eingrenzt &amp; identifiziert.</p>
<p>Oder gibt es eventuell Tools, die das Speicherhandling beobachten (Gibt ja diverse Memory-Leakcheck Tools) und so automatisiert solche Fehler identifizieren können?</p>
<p>Vielen Dank für eure Mühe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1670532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1670532</guid><dc:creator><![CDATA[jghj]]></dc:creator><pubDate>Thu, 26 Feb 2009 09:48:02 GMT</pubDate></item><item><title><![CDATA[Reply to Unerwarteter Programmablauf on Thu, 26 Feb 2009 17:38:37 GMT]]></title><description><![CDATA[<p>Genau für deine Anwendung ein Programm zu finden, dass deine Fehler findet wird schwer. Da bist du wahrscheinlich mit einem anständigem Debugger besser beholfen. Wenn du ein grosses Projekt hast und da schon auf einer wackligen Basis etwas aufgebaut hast, wird es sehr schwer (bist gar unmöglich) das wieder zu beheben und etwas schönes draus zu machen. Du kannst natürlich versuchen das ganze zu refactoren und gegebenfalls unsichere Stellen der Speicherverwaltung mit Klassen zu kapseln und dann allenfalls die Verwaltung mittracken und/oder gleich etwas benutzen, dass dir alles verwaltet. (Smart Pointer o.ä.)</p>
<p>Das Problem, dass man irgendwann merkt, dass man sein Proejkt nicht so gut geplant hat, wie man hätte tun sollen kennt wahrscheinlich jeder. Und viele gehen da den Weg komplett alles zu schreiben. (habe ich auch schon getan). Das praktische ist, dass man dann zuerst mal das Design macht und alles durchdenkt und dann kann man bei gewissen Stellen doch recht viel vom älteren Code nehmen und so anpassen, dass er doch ins Konzept reinpasst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1670835</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1670835</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 26 Feb 2009 17:38:37 GMT</pubDate></item><item><title><![CDATA[Reply to Unerwarteter Programmablauf on Fri, 27 Feb 2009 10:49:44 GMT]]></title><description><![CDATA[<p>Es ist wahrscheinlich, dass du irgendein Problem mit Zeigern hast. Das kann nämlich schnell passieren und fatale Auswirkungen haben. Sehr schlimm wird es, wenn das Verhalten bei jedem Programmdurchlauf ein wenig anders ist...</p>
<p>Die Problematik dabei ist auch, dass man Fehler schwer eingrenzen kann. Wie bei deinem <code>closedir()</code> -Aufruf - gut möglich, dass schon sehr viel früher etwas falsch gelaufen ist, das sich aber erst dort bemerkbar macht. Auch fehlerhaft allozierter oder beschädigter Speicher macht oft erst Probleme beim Freigeben (z.B. durch Heap Corruptions).</p>
<p>Ich würde an deiner Stelle versuchen, die Stellen, wo du &quot;frickelig&quot; - also relativ maschinennah und riskant - arbeitest, genauer zu untersuchen. Wenn du viele derer Stellen hast, wird das sehr schnell mühsam, und da lohnt sich ein Neu-Schreiben eher. Wie von drakon angetönt solltest du versuchen, auf höherer Abstraktionsebene zu arbeiten, also Smart Pointer statt rohen Zeigern und Container statt new und delete einzusetzen. Damit kannst du schon mal sehr viel eingrenzen, durch Assertions werden zum Beispiel allfällige Fehler noch viel besser mitgeteilt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1671165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1671165</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 27 Feb 2009 10:49:44 GMT</pubDate></item></channel></rss>