<?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[Programmfehler durch Funktion]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Funktion die aus einer binärDatei, einen Vektor einer Klasse mit Objekten füllt. Dies ist eine Funktion zum laden zuvor gespeicherter Daten. Rufe ich diese Funktion auf, funktioniert zunächst alles wie gewünscht. Allerdings erzeugt das Programm beim schließen einen Fehler und schmiert gelegentlich auch zur Laufzeit ab. Wird diese Funktion nicht aufgerufen funktioniert alles einwandfrei.</p>
<p>Habe ich in der Funktion vielleicht einen offensichtlichen Fehler? Ich selbst weiß gerade nicht wo ich weiter suchen kann und bin auch recht neu in der Materie. Deswegen bin ich wirklich dankbar für jeden Hinweis.</p>
<p>Die besagte Funktion:</p>
<pre><code class="language-cpp">vector&lt;tFinger&gt; LoadFile(string imgpath)
{
    imgpath=&quot;data/&quot;+imgpath;
    cstr = new char [imgpath.size()+1];  
    strcpy (cstr, imgpath.c_str());

    ladeFinger.clear();
    ifstream ifs(cstr, ios::binary); 

    if (ifs.is_open())
    {
        while (!ifs.eof())
        {
            ifs.read((char *)&amp;lFinger, sizeof(tFinger));   
            ladeFinger.push_back(tFinger());
            ladeFinger.back()=lFinger;                  
        }
        ifs.close();
    }
    return ladeFinger;
}
</code></pre>
<p>Vielen Dank für die Mühe,<br />
Atme</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/284671/programmfehler-durch-funktion</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 20:09:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/284671.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Apr 2011 20:55:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Programmfehler durch Funktion on Tue, 05 Apr 2011 20:55:00 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe eine Funktion die aus einer binärDatei, einen Vektor einer Klasse mit Objekten füllt. Dies ist eine Funktion zum laden zuvor gespeicherter Daten. Rufe ich diese Funktion auf, funktioniert zunächst alles wie gewünscht. Allerdings erzeugt das Programm beim schließen einen Fehler und schmiert gelegentlich auch zur Laufzeit ab. Wird diese Funktion nicht aufgerufen funktioniert alles einwandfrei.</p>
<p>Habe ich in der Funktion vielleicht einen offensichtlichen Fehler? Ich selbst weiß gerade nicht wo ich weiter suchen kann und bin auch recht neu in der Materie. Deswegen bin ich wirklich dankbar für jeden Hinweis.</p>
<p>Die besagte Funktion:</p>
<pre><code class="language-cpp">vector&lt;tFinger&gt; LoadFile(string imgpath)
{
    imgpath=&quot;data/&quot;+imgpath;
    cstr = new char [imgpath.size()+1];  
    strcpy (cstr, imgpath.c_str());

    ladeFinger.clear();
    ifstream ifs(cstr, ios::binary); 

    if (ifs.is_open())
    {
        while (!ifs.eof())
        {
            ifs.read((char *)&amp;lFinger, sizeof(tFinger));   
            ladeFinger.push_back(tFinger());
            ladeFinger.back()=lFinger;                  
        }
        ifs.close();
    }
    return ladeFinger;
}
</code></pre>
<p>Vielen Dank für die Mühe,<br />
Atme</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045204</guid><dc:creator><![CDATA[Atme]]></dc:creator><pubDate>Tue, 05 Apr 2011 20:55:00 GMT</pubDate></item><item><title><![CDATA[Reply to Programmfehler durch Funktion on Tue, 05 Apr 2011 21:03:18 GMT]]></title><description><![CDATA[<p>Was soll denn das Gebastel mit dem char-Array darstellen (das du übrigens nirgens freigibst)? Das ist unnötig - du kannst auch imgpath.c_str() direkt an den Stream-Konstruktor übergeben.</p>
<p>Zweitens liefert eof() erst dann true zurück, wenn die vorige Lese-Operation schiefgegangen ist, d.h. im letzten Schleifendurchlauf hast du ein ungültiges Objekt.</p>
<p>PS: Wie ist eigentlich die Klasse tFinger definiert? Damit könntest du auch Probleme haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045210</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045210</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 05 Apr 2011 21:03:18 GMT</pubDate></item><item><title><![CDATA[Reply to Programmfehler durch Funktion on Tue, 05 Apr 2011 21:56:48 GMT]]></title><description><![CDATA[<p>Wozu wird erst ein tFinger() per push_back eingefügt, um den Wert dann gleich wieder zu überschreiben? Du kannst doch gleich den richtigen Wert einfügen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045240</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 05 Apr 2011 21:56:48 GMT</pubDate></item><item><title><![CDATA[Reply to Programmfehler durch Funktion on Tue, 05 Apr 2011 22:05:00 GMT]]></title><description><![CDATA[<p>Ich glaube ich habe selten so eine hässliche Pfuscherei gesehen. Mich wunderts nicht, dass das abstürzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045251</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Tue, 05 Apr 2011 22:05:00 GMT</pubDate></item><item><title><![CDATA[Reply to Programmfehler durch Funktion on Tue, 05 Apr 2011 22:36:22 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>danke für die Antworten. Pfuscherei, ja klar. Ich probiere und lerne.</p>
<p>Ich erhoffe mir auch nicht die Patentlösung, aber vielleicht habe ich einen Fehler verursacht der in dem Code offensichtlich zu besagtem Fehlverhalten führt und schnell ersichtlich ist. Ansonsten bleibt mir nichts übrig, als alles nocheinmal aufzuräumen und weiter zu grübeln.</p>
<p>Das mit dem push_back habe ich bereits geändert, macht natürlich keinen Sinn.</p>
<p>Das ungültige Objekt habe ich durch eine weitere Abfrage abgefangen, verursacht aber auch nicht den Fehler. Der merkwürdigerweise erst beim Beenden auftritt und nur wenn die besagte Funktion aktiv wird. Es muss ein Speicherproblem sein?!</p>
<p>Hier die Klasse tFinger. Dazu sei noch erwähnt, dass ich mich dem Openframeworks bediene, welches mit GLUT wirkt.</p>
<p>So long,</p>
<p>Atme</p>
<pre><code class="language-cpp">class tFinger 	
{
public:		

tFinger()
    {
    touch=false;id=-1; x=-1; y=-1;dauer=0;
    }	

float GetTime(float zeit){return zeit-dauer;}
float SetTime(float zeit){dauer=zeit;}

    bool touch;
    float dauer;
    int id;
    int x;
    int y;
    int menu;

    ofxVec3f pktA;
    ofxVec3f pktB;
    ofxVec3f Bewegung;
    bool pktAset;

    ofxVec3f	pts[1500]; 
    int		nPts;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2045268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045268</guid><dc:creator><![CDATA[Atme]]></dc:creator><pubDate>Tue, 05 Apr 2011 22:36:22 GMT</pubDate></item><item><title><![CDATA[Reply to Programmfehler durch Funktion on Wed, 06 Apr 2011 07:16:00 GMT]]></title><description><![CDATA[<p>Atme schrieb:</p>
<blockquote>
<pre><code class="language-cpp">ifs.read((char *)&amp;lFinger, sizeof(tFinger));
</code></pre>
</blockquote>
<p>und</p>
<p>Atme schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class tFinger     
{
public:        

tFinger()
    {
    touch=false;id=-1; x=-1; y=-1;dauer=0;
    }    

float GetTime(float zeit){return zeit-dauer;}
float SetTime(float zeit){dauer=zeit;}

    bool touch;
    float dauer;
    int id;
    int x;
    int y;
    int menu;

    ofxVec3f pktA;
    ofxVec3f pktB;
    ofxVec3f Bewegung;
    bool pktAset;

    ofxVec3f    pts[1500]; 
    int        nPts;
}
</code></pre>
</blockquote>
<p>sehen schon mal gefährlich aus, da tFinger aufgrund der member ofxVec3F möglicherweise kein POD (Plain old data, für google) ist, den man blockweise einlesen kann.<br />
Mach´s wie in C++ vorgesehen: überlade die Stream Operatoren, um tFinger Objekte zu lesen und zu schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045311</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 06 Apr 2011 07:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to Programmfehler durch Funktion on Wed, 06 Apr 2011 21:13:23 GMT]]></title><description><![CDATA[<p>Atme schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// ...
        while (!ifs.eof())
        {
            ifs.read((char *)&amp;lFinger, sizeof(tFinger));
</code></pre>
</blockquote>
<p>Hallo Atme,</p>
<p>diese Konstruktion liest ein tFinger-Objekt zuviel ein. Der Inhalt sollte jedoch mit dem letzten in der Datei übereinstimmen. Zu der while(!EOF)-read-Schleife siehe auch <a href="http://www.c-plusplus.net/forum/p2042572#2042572" rel="nofollow">hier</a>.</p>
<p>Besser ist:</p>
<pre><code class="language-cpp">for( tFinger f; ifs.read((char *)&amp;f, sizeof(tFinger)); ) {
        ladeFinger.push_back( f);
    }
    if( !ifs.eof() || ifs.gcount() != 0 ) // oder ifs.gcount() != sizeof(tFinger); muss ich morgen nochmal nachsehen
        cerr &lt;&lt; &quot;Lesefehler&quot; &lt;&lt; endl;
</code></pre>
<p>ansonsten gilt das bereits gesagte; prüfe bitte, ob ofxVec3f ein POD ist.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2045746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2045746</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 06 Apr 2011 21:13:23 GMT</pubDate></item></channel></rss>