<?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[fstream, warum bekomme ich in der klasse segfaults???]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade dabei meinen C Code in C++ Klassen zu packen und bin dabei auf folgendes Problem gestossen:</p>
<p>Öffne ich eine Datei in meiner Main Funktion mit</p>
<pre><code>char bootsector[512];
ifstream is;
is.open(&quot;../../Windows7FreshDropperStage1.dd&quot;, ios::binary);

if (!is.is_open()) {
  return false;
}

is.read(bootsector, 512);
is.close();
</code></pre>
<p>dann funktioniert das ganze einwandfrei.</p>
<p>Packe ich das ganze aber jetzt in eine Klasse mit</p>
<pre><code>class Bootsector {
  bool read(){
   char bootsector[512];
   ifstream is;
   is.open(&quot;../../Windows7FreshDropperStage1.dd&quot;, ios::binary);

   if (!is.is_open()) {
     return false;
   }

   is.read(bootsector, 512);
   is.close();
  }
}
</code></pre>
<p>dann schmiert mir das Programm beim is.read mit einem Segfault ab. Debuggen ist auch essig weil der Segfault gleich passiert.</p>
<p>Was ist da los? Ich bin ziemlich ratlos</p>
<p>Eine reine C Funktion innerhalb der Klasse funktioniert dann wieder reibungslos:</p>
<pre><code>FILE *fp = fopen(&quot;../../Windows7FreshDropperStage1.dd&quot;, &quot;rb&quot;);
	fread(bootsector, 1, 512, fp);
	fclose(fp);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/338953/fstream-warum-bekomme-ich-in-der-klasse-segfaults</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 21:57:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/338953.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 23 Jul 2016 23:49:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 00:03:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bin gerade dabei meinen C Code in C++ Klassen zu packen und bin dabei auf folgendes Problem gestossen:</p>
<p>Öffne ich eine Datei in meiner Main Funktion mit</p>
<pre><code>char bootsector[512];
ifstream is;
is.open(&quot;../../Windows7FreshDropperStage1.dd&quot;, ios::binary);

if (!is.is_open()) {
  return false;
}

is.read(bootsector, 512);
is.close();
</code></pre>
<p>dann funktioniert das ganze einwandfrei.</p>
<p>Packe ich das ganze aber jetzt in eine Klasse mit</p>
<pre><code>class Bootsector {
  bool read(){
   char bootsector[512];
   ifstream is;
   is.open(&quot;../../Windows7FreshDropperStage1.dd&quot;, ios::binary);

   if (!is.is_open()) {
     return false;
   }

   is.read(bootsector, 512);
   is.close();
  }
}
</code></pre>
<p>dann schmiert mir das Programm beim is.read mit einem Segfault ab. Debuggen ist auch essig weil der Segfault gleich passiert.</p>
<p>Was ist da los? Ich bin ziemlich ratlos</p>
<p>Eine reine C Funktion innerhalb der Klasse funktioniert dann wieder reibungslos:</p>
<pre><code>FILE *fp = fopen(&quot;../../Windows7FreshDropperStage1.dd&quot;, &quot;rb&quot;);
	fread(bootsector, 1, 512, fp);
	fclose(fp);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2503212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503212</guid><dc:creator><![CDATA[Procrash]]></dc:creator><pubDate>Sun, 24 Jul 2016 00:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 00:56:22 GMT]]></title><description><![CDATA[<p>Du hast nicht genug Informationen geliefert, damit ich das Problem einkreisen kann.</p>
<pre><code>#include &lt;fstream&gt;
#include &lt;iostream&gt;

class Bootsector
{
public:
    bool read()
    {
        char bootsector[512];
        std::ifstream is;
        is.open(&quot;/dev/sda&quot;,std::ios::binary);

        if (!is.is_open())
            return false;

        is.read(bootsector,512);
        is.close();
        return true;
    }
};

int main()
{       
    Bootsector x;
    std::cout &lt;&lt; x.read() &lt;&lt; &quot;\n&quot;;
    return 0;
}
</code></pre>
<pre><code>$ g++ code.cpp -o code
$ ./code
0
$ sudo ./code
1
$
</code></pre>
<p>Vielleicht machst du schon vorher was kaputt. Wenn man kein reproduzierbares Beispiel postet, kann man das nicht sagen.</p>
<p>Und die Bootsektorgröße würde ich irgendwo speichern. Ist blöd, zweimal so eine Konstante im Code zu haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503213</guid><dc:creator><![CDATA[dachschaden]]></dc:creator><pubDate>Sun, 24 Jul 2016 00:56:22 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 07:38:57 GMT]]></title><description><![CDATA[<p>So, nochmal das Minimalbeispiel bei dem ich definitiv einen Absturz bekomme:<br />
Was dubios ist, selbst wenn ich bootsector als lokale Variable definiere schmiert das Ding ab, daran liegt es also nicht. Wenn ich auf ein File Verweise dass nicht existiert geht der Code, er bricht als bei</p>
<p>if (!is.is_open())</p>
<p>richtigerweise ab.</p>
<p>Main.cpp</p>
<pre><code>#include &quot;Bootsector.h&quot;

int main(int argc, char**argv) {
  Bootsector bs;
  string filename = &quot;Windows7FreshDropperStage1.dd&quot;;
  bs.read(filename);
}
</code></pre>
<p>Bootsector.h</p>
<pre><code>#pragma once
#pragma pack(1)

#include &lt;stdint.h&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;

using namespace std;

class Bootsector {
private:
	char bootsector[512];
public:
	Bootsector() {}
	bool read(string filename);
};
</code></pre>
<p>Bootsector.cpp</p>
<pre><code>#include &quot;Bootsector.h&quot;

bool Bootsector::read(string filename) {
    ifstream is;
    is.open(filename, ios::binary);

    if (!is.is_open()) {
		return false;
	}

    is.read((char*)bootsector, 512);
    is.close();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2503222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503222</guid><dc:creator><![CDATA[Procrash]]></dc:creator><pubDate>Sun, 24 Jul 2016 07:38:57 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 08:08:46 GMT]]></title><description><![CDATA[<p>Also ich kann keinen Fehler sehen, mein Visual Studio meldet auch nix.</p>
<p>Was nutzt du denn für einen Compiler/Umgebung etc.?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503223</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sun, 24 Jul 2016 08:08:46 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 08:15:05 GMT]]></title><description><![CDATA[<p>void open (<strong>const char</strong>* filename, ios_base::openmode mode = ios_base::in);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503226</guid><dc:creator><![CDATA[EOP_hat_wiedermal]]></dc:creator><pubDate>Sun, 24 Jul 2016 08:15:05 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 08:20:09 GMT]]></title><description><![CDATA[<p>EOP_hat_wiedermal schrieb:</p>
<blockquote>
<p>void open (<strong>const char</strong>* filename, ios_base::openmode mode = ios_base::in);</p>
</blockquote>
<p>Offensichtlich ist der Compiler schon moderner als du.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503228</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 24 Jul 2016 08:20:09 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 08:23:03 GMT]]></title><description><![CDATA[<p>Was soll das pragma pack da?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503229</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 24 Jul 2016 08:23:03 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 08:25:57 GMT]]></title><description><![CDATA[<p><code>pragma pack(1)</code> vor den includes ist wohl das Problem.<br />
Die gesamten headaer files in <code>Bootsector.h</code> ist Quark. Inkludier dort nur was Du brauchst ( <code>&lt;string&gt;</code> im Beispiel). In der *.cpp genauso (nur was Du dort brauchst).<br />
`</p>
<p>using namespace std;` hat in einem Header nix verloren.</p>
<p>Dein read() hat keinen Rückgabewert (siehe dachschadens Posting).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503230</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Sun, 24 Jul 2016 08:25:57 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 08:26:30 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Was soll das pragma pack da?</p>
</blockquote>
<p>Doch nicht so ganz minimal wie ich dachte. Das brauche ich im restlichen Code für meine structs damit ich kein 32bit alignment habe. Vergiss die Zeile hier einfach. Ist mir durchs Copy&amp;Paste reingerutscht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503231</guid><dc:creator><![CDATA[Procrash]]></dc:creator><pubDate>Sun, 24 Jul 2016 08:26:30 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 08:31:54 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p><code>pragma pack(1)</code> vor den includes ist wohl das Problem.<br />
Die gesamten headaer files in <code>Bootsector.h</code> ist Quark. Inkludier dort nur was Du brauchst ( <code>&lt;string&gt;</code> im Beispiel). In der *.cpp genauso (nur was Du dort brauchst).<br />
`</p>
<p>using namespace std;` hat in einem Header nix verloren.</p>
<p>Dein read() hat keinen Rückgabewert (siehe dachschadens Posting).</p>
</blockquote>
<p>Hm. Tastächlich. Pragma Pack war das Problem. Nur wieso? Das sollte dem Compiler doch eigentlich nur mitteilen alle Structs im Byte Alignment anzuordnen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503232</guid><dc:creator><![CDATA[Procrash]]></dc:creator><pubDate>Sun, 24 Jul 2016 08:31:54 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 08:33:35 GMT]]></title><description><![CDATA[<p>Wie ist denn generell so die vorgehensweise:</p>
<p>Sollte im Header File nur dass inkludiert werden was ich für das Header File brauche und im CPP File nur dass was fürs CPP nötig ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503233</guid><dc:creator><![CDATA[Procrash]]></dc:creator><pubDate>Sun, 24 Jul 2016 08:33:35 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 08:37:36 GMT]]></title><description><![CDATA[<p>Habs gelöst. Pragma Pack hat sich logischerweise auch auf alle include files ausgewirkt weil es davor stand, und somit auch auf meine ifstream klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503234</guid><dc:creator><![CDATA[Procrash]]></dc:creator><pubDate>Sun, 24 Jul 2016 08:37:36 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 09:02:57 GMT]]></title><description><![CDATA[<p>Du kann jedoch gerne noch ein pragma push und pop einfügen, um das Alignment danach wieder zurückzusetzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503236</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Sun, 24 Jul 2016 09:02:57 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 09:08:23 GMT]]></title><description><![CDATA[<p>Techel schrieb:</p>
<blockquote>
<p>Du kann jedoch gerne noch ein pragma push und pop einfügen, um das Alignment danach wieder zurückzusetzen.</p>
</blockquote>
<p>Wie funktioniert das mit pragma push und pop? Kenne das nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503237</guid><dc:creator><![CDATA[Procrash]]></dc:creator><pubDate>Sun, 24 Jul 2016 09:08:23 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 11:10:47 GMT]]></title><description><![CDATA[<p>Procrash schrieb:</p>
<blockquote>
<p>Wie funktioniert das mit pragma push und pop? Kenne das nicht.</p>
</blockquote>
<p>Wieso verwendest du das dann?</p>
<p>Keine Gewähr, dass das so funktioniert, den Code habe ich so bei mir drin, bin aber noch nicht dazu gekommen zu testen:</p>
<pre><code>/*Wir wollen 1-Byte-Alignment haben*/
#pragma pack(push,1)

/*Jetzt haben wir 1-Byte-Alignment, hier kommen jetzt unsere Typen:*/
struct winapi_registry_timezone_date
{
        uint16_t year;
        uint16_t mon;
        uint16_t wday;
        uint16_t wmon;
        uint16_t hour;
        uint16_t min;
        uint16_t sec;
        uint16_t ms;
};

/*Und damit der Rest nicht kaputtgeht ...*/
#pragma pack(pop)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2503254</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503254</guid><dc:creator><![CDATA[dachschaden]]></dc:creator><pubDate>Sun, 24 Jul 2016 11:10:47 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 11:19:57 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>EOP_hat_wiedermal schrieb:</p>
<blockquote>
<p>void open (<strong>const char</strong>* filename, ios_base::openmode mode = ios_base::in);</p>
</blockquote>
<p>Offensichtlich ist der Compiler schon moderner als du.</p>
</blockquote>
<p>Das ist O-Ton <a href="http://cppreference.com" rel="nofollow">cppreference.com</a>.</p>
<pre><code>void open( const std::string &amp;filename,                                  
           ios_base::openmode mode = ios_base::in );
	(2) 	(since C++11)
</code></pre>
<p>hab ich erst jetzt entdeckt. Keine Ahnung, wo ich vorhin nachgesehen hab, daß da nur die vorherige Version stand.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503256</guid><dc:creator><![CDATA[EOP_hat_wiedermal]]></dc:creator><pubDate>Sun, 24 Jul 2016 11:19:57 GMT</pubDate></item><item><title><![CDATA[Reply to fstream, warum bekomme ich in der klasse segfaults??? on Sun, 24 Jul 2016 14:55:14 GMT]]></title><description><![CDATA[<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2503305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2503305</guid><dc:creator><![CDATA[Procrash]]></dc:creator><pubDate>Sun, 24 Jul 2016 14:55:14 GMT</pubDate></item></channel></rss>