<?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[Memory Corruption]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein sehr merkwürdiges Problem, das sich schwer beschreiben lässt. Ich hoffe mal mir kann trotzdem geholfen werden.</p>
<p>Ich habe eine Klasse in eine Library gepackt. Diese Klasse ist im Prinzip ein C++ Wrapper für von Matlab/Simulink generierten C-Code.</p>
<p>Die Test-Binary wird gegen diese Library gelinkt und funktioniert ohne Probleme. Wenn ich jetzt versuche die Library in mein größeres Projekt einzubinden schlägt das immer fehl. Ich kann alles kompilieren, aber beim Ausführen erhalte ich folgenden Fehler:</p>
<pre><code>*** glibc detected *** /home/simon/ros_workspace/orocos_toolchain/ocl/bin/deployer-gnulinux: malloc(): memory corruption: 0x09b489f8 ***
</code></pre>
<p>Der Fehler kommt dabei immer wenn eine Instanz der Klasse aus der Library erstellt wird. Er kommt auch gar nicht in den Konstruktor rein, sondern der Fehler scheint schon vorher zu passieren. Ich kann das Problem leider nicht weiter eingrenzen, weil ich keinen Zugriff auf das Programm habe, dass die Library aufruft. Wenn ich aber die Zeile auskommentiere, bei der die Instanz erstellt wird, läuft alles durch.</p>
<p>Gehe ich recht in der Annahme, das man anhand dieser Informationen nichts über das Problem sagen kann? Wo könnte denn der Fehler liegen? Ich finde es äußerst merkwürdig, dass ich mit Projekt A ohne Probleme Instanzen der Klasse erstellen kann, Projekt B aber nicht funktioniert. Daraus schließe ich eigentlich, dass der Fehler bei Projekt B liegen muss. Ich kann mal den Konstrukor schreiben, das bringt aber denke ich auch nicht viel:</p>
<pre><code>BiobipedRSimDevice::BiobipedRSimDevice()
    : simulationStarted(false),
      enable(false),
      setup(false),
      oldBioBipedyBodyMsgValid(false),
      model(BioBiped()),
      dataLoggingActive(false),
      dtSim(0.001) {
    if (ssGetErrorStatus(model))
        cout &lt;&lt; &quot;Error during model registration: &quot; &lt;&lt; ssGetErrorStatus(model) &lt;&lt; endl;
}
</code></pre>
<p>Wenn ich statt BioBiped() NULL schreibe bleibt die Fehlermeldung weiterhin, daran kann es also auch nicht liegen.</p>
<p>PS: Arbeite mit CMake und Standardcompiler unter Ubuntu.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/314420/memory-corruption</link><generator>RSS for Node</generator><lastBuildDate>Sat, 01 Aug 2026 04:32:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/314420.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 01 Mar 2013 18:55:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Memory Corruption on Fri, 01 Mar 2013 18:55:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein sehr merkwürdiges Problem, das sich schwer beschreiben lässt. Ich hoffe mal mir kann trotzdem geholfen werden.</p>
<p>Ich habe eine Klasse in eine Library gepackt. Diese Klasse ist im Prinzip ein C++ Wrapper für von Matlab/Simulink generierten C-Code.</p>
<p>Die Test-Binary wird gegen diese Library gelinkt und funktioniert ohne Probleme. Wenn ich jetzt versuche die Library in mein größeres Projekt einzubinden schlägt das immer fehl. Ich kann alles kompilieren, aber beim Ausführen erhalte ich folgenden Fehler:</p>
<pre><code>*** glibc detected *** /home/simon/ros_workspace/orocos_toolchain/ocl/bin/deployer-gnulinux: malloc(): memory corruption: 0x09b489f8 ***
</code></pre>
<p>Der Fehler kommt dabei immer wenn eine Instanz der Klasse aus der Library erstellt wird. Er kommt auch gar nicht in den Konstruktor rein, sondern der Fehler scheint schon vorher zu passieren. Ich kann das Problem leider nicht weiter eingrenzen, weil ich keinen Zugriff auf das Programm habe, dass die Library aufruft. Wenn ich aber die Zeile auskommentiere, bei der die Instanz erstellt wird, läuft alles durch.</p>
<p>Gehe ich recht in der Annahme, das man anhand dieser Informationen nichts über das Problem sagen kann? Wo könnte denn der Fehler liegen? Ich finde es äußerst merkwürdig, dass ich mit Projekt A ohne Probleme Instanzen der Klasse erstellen kann, Projekt B aber nicht funktioniert. Daraus schließe ich eigentlich, dass der Fehler bei Projekt B liegen muss. Ich kann mal den Konstrukor schreiben, das bringt aber denke ich auch nicht viel:</p>
<pre><code>BiobipedRSimDevice::BiobipedRSimDevice()
    : simulationStarted(false),
      enable(false),
      setup(false),
      oldBioBipedyBodyMsgValid(false),
      model(BioBiped()),
      dataLoggingActive(false),
      dtSim(0.001) {
    if (ssGetErrorStatus(model))
        cout &lt;&lt; &quot;Error during model registration: &quot; &lt;&lt; ssGetErrorStatus(model) &lt;&lt; endl;
}
</code></pre>
<p>Wenn ich statt BioBiped() NULL schreibe bleibt die Fehlermeldung weiterhin, daran kann es also auch nicht liegen.</p>
<p>PS: Arbeite mit CMake und Standardcompiler unter Ubuntu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2303426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2303426</guid><dc:creator><![CDATA[mikemodanoxxx]]></dc:creator><pubDate>Fri, 01 Mar 2013 18:55:08 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Corruption on Fri, 01 Mar 2013 19:29:52 GMT]]></title><description><![CDATA[<p>Der Fehler ist schon passiert, bevor die Meldung geniert wird. Hier wird nur während eines malloc-Aufrufs festgestellt, das irgendwer den Speicher kaputt geschrieben hat.</p>
<p>Da du mit Linux arbeitest: man mallopt</p>
<p>Grundsätzlich ist das aber kein C++-Problem =&gt; falsches Forum</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2303437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2303437</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Fri, 01 Mar 2013 19:29:52 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Corruption on Mon, 04 Mar 2013 15:53:38 GMT]]></title><description><![CDATA[<p>Was kann denn generell dazu führen, dass so etwas passiert?</p>
<p>Projekt A kann eine Instanz der Klasse erstellen.<br />
Projekt B kann keine Instanz der Klasse erstellen.</p>
<p>Die Klasse und speziell der Konstruktor sind aber ja eigentlich unabhängig vom Projekt, weil sie nur eingebunden werden. Finde das Ganze sehr merkwürdig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304222</guid><dc:creator><![CDATA[mikemodanoxxx]]></dc:creator><pubDate>Mon, 04 Mar 2013 15:53:38 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Corruption on Mon, 04 Mar 2013 16:09:50 GMT]]></title><description><![CDATA[<p>Liegt vielleicht an Projekt B oder an der Basisklasse oder an unterschiedliche mallocs aus verschiedenen Runtime-Bibliotheken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304232</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Mon, 04 Mar 2013 16:09:50 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Corruption on Mon, 04 Mar 2013 16:11:32 GMT]]></title><description><![CDATA[<p>mikemodanoxxx  schrieb:</p>
<blockquote>
<p>Was kann denn generell dazu führen, dass so etwas passiert?</p>
</blockquote>
<p>Die Fehlermeldung deutet darauf hin, dass über die Grenzen eines dynamischen Arrays hinaus geschrieben wurde. Theoretisch kann solch ein Fehler natürlich auch aus allerlei anderen Gründen auftreten, aber das ist mein Tipp.</p>
<p>Da du anscheinend unter Linux entwickelst, kann ich dir nur sehr die Benutzung von valgrind empfehlen. Jedes deiner Programme sollte unter</p>
<pre><code>valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes dein_programm
</code></pre>
<p>fehler- und warnungsfrei laufen. A propos Warnungen: Compilerwarnungen auf Maximum, gerade die Warnungen des GCC sind sehr gut. Warnungen wie Compilerfehler behandeln. Der GCC bietet außerdem eine Debugruntime an, die man mittels -D_GLIBCXX_DEBUG bei der Übersetzung aktivieren kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304233</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 04 Mar 2013 16:11:32 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Corruption on Mon, 04 Mar 2013 17:14:46 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>gerade die Warnungen des GCC sind sehr gut.</p>
</blockquote>
<p>Naja, die üblichen falschen Warnung sind da aber trotzdem: warning: no return statement in function returning non-void, wobei diese Situation nie eintreten kann, weil ein switch vorher returnt, warning: [enum_elem] not handled in switch, wobei es überflüssig ist es zu behandeln, ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304275</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Mon, 04 Mar 2013 17:14:46 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Corruption on Mon, 04 Mar 2013 17:37:48 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<p>Liegt vielleicht an Projekt B oder an der Basisklasse oder an unterschiedliche mallocs aus verschiedenen Runtime-Bibliotheken.</p>
</blockquote>
<p>Was heißt aus unterschiedlichen Runtime-Bibliotheken? Sowas könnte am Ehesten hinhauen. Der Fehler tritt wohl in einer Matlab-Bibliothek auf. Die wurde also nicht von mir selbst kompiliert.</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>mikemodanoxxx  schrieb:</p>
<blockquote>
<p>Was kann denn generell dazu führen, dass so etwas passiert?</p>
</blockquote>
<p>Die Fehlermeldung deutet darauf hin, dass über die Grenzen eines dynamischen Arrays hinaus geschrieben wurde. Theoretisch kann solch ein Fehler natürlich auch aus allerlei anderen Gründen auftreten, aber das ist mein Tipp.</p>
<p>Da du anscheinend unter Linux entwickelst, kann ich dir nur sehr die Benutzung von valgrind empfehlen. Jedes deiner Programme sollte unter</p>
<pre><code>valgrind --tool=memcheck --leak-check=yes --show-reachable=yes --num-callers=20 --track-fds=yes dein_programm
</code></pre>
<p>fehler- und warnungsfrei laufen. A propos Warnungen: Compilerwarnungen auf Maximum, gerade die Warnungen des GCC sind sehr gut. Warnungen wie Compilerfehler behandeln. Der GCC bietet außerdem eine Debugruntime an, die man mittels -D_GLIBCXX_DEBUG bei der Übersetzung aktivieren kann.</p>
</blockquote>
<p>Ja ich hatte es schon mit valgrind versucht (bzw mit alleyoop), das hat mich aber nicht weitergebracht.</p>
<pre><code>==18298== Invalid write of size 4
==18298==    at 0x451B674: pthread_cond_init@@GLIBC_2.3.2 (pthread_cond_init.c:40)
==18298==    by 0xFAD277C: ??? (in /usr/local/MATLAB/R2012a/bin/glnx86/libmwservices.so)
==18298==    by 0xF9A3E5B: ??? (in /usr/local/MATLAB/R2012a/bin/glnx86/libmwservices.so)
==18298==    by 0x400EE38: call_init (dl-init.c:70)
==18298==    by 0xBECB1152: ???
==18298==    by 0x4E45504E: ???
</code></pre>
<p>Hilft mir das in irgendeiner Weise?</p>
<p>edit: Ich habe grade mal geschaut. Ich habe die glibc-Version 2.13.1. Falls es an den unterschiedlichen Versionen liegt: Kann man das irgendwie umgehen?<br />
edit2: sorry, 2.15 meinte ich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304279</guid><dc:creator><![CDATA[mikemodanoxxx]]></dc:creator><pubDate>Mon, 04 Mar 2013 17:37:48 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Corruption on Mon, 04 Mar 2013 17:48:28 GMT]]></title><description><![CDATA[<p>mikemodanoxxx schrieb:</p>
<blockquote>
<p>Hilft mir das in irgendeiner Weise?</p>
</blockquote>
<p>Wenn du mit Debugsymbolen (und möglichst ohne Optimierung) compilierst: Sehr sogar! Damit hast du den Fehler genau lokalisiert.<br />
Ohne Debugsymbole: Nun, nicht so sehr, wie du selber merkst. Du weißt bloß, da ist ein Programmierfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304292</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304292</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 04 Mar 2013 17:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to Memory Corruption on Mon, 04 Mar 2013 18:55:41 GMT]]></title><description><![CDATA[<p>Ich habe die Debug-Option angeschaltet. In einer anderen Test-Binary kann ich debuggen und sehe die Symbole. An der valgrind-Ausgabe ändert sich jedoch nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2304309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2304309</guid><dc:creator><![CDATA[mikemodanoxxx]]></dc:creator><pubDate>Mon, 04 Mar 2013 18:55:41 GMT</pubDate></item></channel></rss>