<?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[Einlesen der Datei führt zu Crash]]></title><description><![CDATA[<p>Hab die ersten Gehschritte mit Dateien einlesen unter C++ gewagt. Dazu lade ich eine header-Datei, die mir generell für das ganze Programm die wichtigen Header-Dateien lädt und ein paar wichtige Funktionen definiert... eine davon sollte mir eine Datei zumindest einmal laden, allerdings führt es zu einem Crash.</p>
<p>So sieht die Header-Datei aus (headers/header.h):</p>
<pre><code class="language-cpp">#ifndef LEARN_HEADER
#define LEARN_HEADER

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;

using std::string;
using std::vector;
using std::cout;
using std::cin;
using std::ifstream;
using std::ios;

char readfile()
{
	int length;
	char * buffer;

	//define handler and open file
	ifstream is;
	is.open(&quot;/Users/lumio/Developer/learning/learn/tmp.txt&quot;, ios::binary);

	//get length of file
	is.seekg(0, ios::end);
	length = is.tellg();
	is.seekg(0, ios::beg);

	buffer = new char[length];

	//read file
	is.read(buffer, length);
	is.close();

	cout.write(buffer, length);
	delete[] buffer;
	return 'a';
}

#endif
</code></pre>
<p>Die main.cpp sieht so aus:</p>
<pre><code class="language-cpp">#include &quot;headers.h&quot;

vector&lt;string&gt; array;

int main (int argc, char * const argv[]) {
	readfile();
	return 0;
}
</code></pre>
<p>Als ausgabe kommt dann folgendes:</p>
<blockquote>
<p>Loading program into debugger…<br />
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)<br />
Copyright 2004 Free Software Foundation, Inc.<br />
GDB is free software, covered by the GNU General Public License, and you are<br />
welcome to change it and/or distribute copies of it under certain conditions.<br />
Type &quot;show copying&quot; to see the conditions.<br />
There is absolutely no warranty for GDB. Type &quot;show warranty&quot; for details.<br />
This GDB was configured as &quot;i386-apple-darwin&quot;.Program loaded.<br />
sharedlibrary apply-load-rules all<br />
Attaching to program: `/Users/lumio/Developer/learning/learn/build/Debug/learn', process 708.</p>
</blockquote>
<p>Sorry für den langen Post</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238913/einlesen-der-datei-führt-zu-crash</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 15:18:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238913.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 17 Apr 2009 08:36:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 08:36:09 GMT]]></title><description><![CDATA[<p>Hab die ersten Gehschritte mit Dateien einlesen unter C++ gewagt. Dazu lade ich eine header-Datei, die mir generell für das ganze Programm die wichtigen Header-Dateien lädt und ein paar wichtige Funktionen definiert... eine davon sollte mir eine Datei zumindest einmal laden, allerdings führt es zu einem Crash.</p>
<p>So sieht die Header-Datei aus (headers/header.h):</p>
<pre><code class="language-cpp">#ifndef LEARN_HEADER
#define LEARN_HEADER

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;fstream&gt;
#include &lt;vector&gt;

using std::string;
using std::vector;
using std::cout;
using std::cin;
using std::ifstream;
using std::ios;

char readfile()
{
	int length;
	char * buffer;

	//define handler and open file
	ifstream is;
	is.open(&quot;/Users/lumio/Developer/learning/learn/tmp.txt&quot;, ios::binary);

	//get length of file
	is.seekg(0, ios::end);
	length = is.tellg();
	is.seekg(0, ios::beg);

	buffer = new char[length];

	//read file
	is.read(buffer, length);
	is.close();

	cout.write(buffer, length);
	delete[] buffer;
	return 'a';
}

#endif
</code></pre>
<p>Die main.cpp sieht so aus:</p>
<pre><code class="language-cpp">#include &quot;headers.h&quot;

vector&lt;string&gt; array;

int main (int argc, char * const argv[]) {
	readfile();
	return 0;
}
</code></pre>
<p>Als ausgabe kommt dann folgendes:</p>
<blockquote>
<p>Loading program into debugger…<br />
GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008)<br />
Copyright 2004 Free Software Foundation, Inc.<br />
GDB is free software, covered by the GNU General Public License, and you are<br />
welcome to change it and/or distribute copies of it under certain conditions.<br />
Type &quot;show copying&quot; to see the conditions.<br />
There is absolutely no warranty for GDB. Type &quot;show warranty&quot; for details.<br />
This GDB was configured as &quot;i386-apple-darwin&quot;.Program loaded.<br />
sharedlibrary apply-load-rules all<br />
Attaching to program: `/Users/lumio/Developer/learning/learn/build/Debug/learn', process 708.</p>
</blockquote>
<p>Sorry für den langen Post</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697078</guid><dc:creator><![CDATA[Lumio]]></dc:creator><pubDate>Fri, 17 Apr 2009 08:36:09 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 08:46:43 GMT]]></title><description><![CDATA[<p>Und wo ist da der Crash? Du hast dein Programm in den GDB geladen, mehr nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697085</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697085</guid><dc:creator><![CDATA[ElBlues]]></dc:creator><pubDate>Fri, 17 Apr 2009 08:46:43 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 08:49:55 GMT]]></title><description><![CDATA[<p>Teste mal, ob die Datei auch wirklich geöffnet wurde:<br />
<a href="http://www.cplusplus.com/reference/iostream/ifstream/is_open/" rel="nofollow">http://www.cplusplus.com/reference/iostream/ifstream/is_open/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697087</guid><dc:creator><![CDATA[MiP]]></dc:creator><pubDate>Fri, 17 Apr 2009 08:49:55 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 08:56:54 GMT]]></title><description><![CDATA[<p>OT: Zwei Dinge zum Abgewöhnen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> :</p>
<p>1. using in Header-Dateien</p>
<p>2. massenhaftes inkludieren von Header-Dateien (inkludiere Header-Dateien dort, wo sie gebraucht werden)</p>
<p>Grüße... Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697090</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Fri, 17 Apr 2009 08:56:54 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 09:14:47 GMT]]></title><description><![CDATA[<p>Weiterhin solltest du überlegen ob du nun C++ oder C programmierst? Wenn C++, dann lies die Datei auch ordentlich ein, außer du bist gezwungen sie binär einzulesen, bist du das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697107</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Fri, 17 Apr 2009 09:14:47 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 09:57:15 GMT]]></title><description><![CDATA[<p>Hi, danke für eure Antworten, vorallem die Kritik am Stil, allerdings bringt mir die Kritik nichts, wenn ich keinen Grund dazu weiss <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Warum soll ich using nicht in header-Dateien verwenden?<br />
Warum soll ich keine Massen-includes in header-Dateien machen bzw nur da wo ich sie brauche?</p>
<p>Und wie soll ich die Datei einlesen?<br />
Ich wollte nach diesem Beispiel hier gehen:<br />
<a href="http://www.cplusplus.com/reference/iostream/istream/read/" rel="nofollow">http://www.cplusplus.com/reference/iostream/istream/read/</a></p>
<p>Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697126</guid><dc:creator><![CDATA[Lumio]]></dc:creator><pubDate>Fri, 17 Apr 2009 09:57:15 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 10:03:13 GMT]]></title><description><![CDATA[<p>Schön das du wenigstens versucht nach der Referenz zu programmieren.<br />
Read kann man nutzen,jedoch wenn du nicht gezwungen bist binär einzulesen, sondern wenn du die Daten in Roh vorliegen hast. Dann ist das einlesen in dieser Art und weiße meistens besser</p>
<p>Ganze Zeilen einlesen, solange Dateiende nicht erreicht:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;fstream&gt;
#include&lt;vector&gt;
#include&lt;string&gt;

int main()
{
   std::string temp;
   std::vector&lt;std::string&gt; dateiinhalt;
   std::ifstream input(&quot;deinedatei.txt&quot;);//ifstream ist zum lesen da

   while(getline(input,temp))
   {
       dateiinhalt.push_back(temp);
   }
}
</code></pre>
<p>Wortweises einlesen einer Datei:</p>
<pre><code class="language-cpp">#include&lt;iostream&gt;
#include&lt;fstream&gt;
#include&lt;vector&gt;
#include&lt;string&gt;

int main()
{
   std::string temp;
   std::vector&lt;std::string&gt; dateiinhalt;
   std::ifstream input(&quot;deinedatei.txt&quot;);//ifstream ist zum lesen da

   while(input&gt;&gt;temp)
   {
       dateiinhalt.push_back(temp);
   }
}
</code></pre>
<p>Man beachte die whiles, diese unterscheiden sich pro Version.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697130</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Fri, 17 Apr 2009 10:03:13 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 10:12:34 GMT]]></title><description><![CDATA[<p>Allerdings fehlen dann bei beiden versionen die whitespaces, zumindest beim zweiteren ganz. Beim zeilenweise einlesen, fehlt ja \n bzw für Windows (trifft mich nicht) \r\n</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697137</guid><dc:creator><![CDATA[Lumio]]></dc:creator><pubDate>Fri, 17 Apr 2009 10:12:34 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 10:13:22 GMT]]></title><description><![CDATA[<p>Was fehlt da? Willst du \r\n entfernen oder was meinst du grad?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697138</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697138</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Fri, 17 Apr 2009 10:13:22 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 10:23:18 GMT]]></title><description><![CDATA[<p>Nein, ich möchte auch gerne \n im Speicher haben <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> und das ist bei getline nicht vorhanden, oder?</p>
<p>//edit: bzw. warum ist es nicht gut, die Datei binary zu lesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697142</guid><dc:creator><![CDATA[Lumio]]></dc:creator><pubDate>Fri, 17 Apr 2009 10:23:18 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 13:40:05 GMT]]></title><description><![CDATA[<p>Lumio schrieb:</p>
<blockquote>
<p>Warum soll ich using nicht in header-Dateien verwenden?</p>
</blockquote>
<p>Weil du damit den Namespace aushebelst. Sobald du irgendwo das Headerfile inkludierst, ist auch dort die using-Anweisung drin. Dadurch läufst du Gefahr, irgendwann einen Namenskonflikt zu haben. Die using Anweisung kann man nicht wieder zurücksetzen.<br />
Auch wirst du dich entsprechend ärgern, wenn das Headerfile zu einer Bibliothek gehört, welche du benutzt. Denn dann hast du überhaupt keine Möglichkeit, dies zu verändern. Du wirst nur die Bibliothek und den Programmierer verfluchen können <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Also die using-Anweisungen entweder in einen Scope rein, denn die Dinger sind auch Scope abhängig und nur in den globalen Scope, wenn du dich in einem Implementationfile befindest. Aber auch dort, würde ich aufpassen mit dem Zumüllen vom globalen Scope. Namespaces haben schliesslich ihre Berechtigung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Lumio schrieb:</p>
<blockquote>
<p>Warum soll ich keine Massen-includes in header-Dateien machen bzw nur da wo ich sie brauche?</p>
</blockquote>
<p>Weil du damit unnötige Abhängigkeiten machst. Gerade in IDEs gibt es die Möglichkeit, dass man nur die veränderten Sachen neu kompilieren muss. Wenn du nun ein Projekt hast, welches für einen kompletten Build 30 Minuten braucht (was nicht abnormal ist!), dann bist du froh, wenn du etwas in einem Header veränderst und nur der veränderte Teil neu kompiliert werden muss. Wenn du unnötige Abhängigkeiten geschaffen hast, dann muss alles neu kompiliert werden, jedesmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Zudem müssen auch unnötige Headerfiles immer neu geparst werden. Dies kann sehr aufwendig sein und somit die Kompilezeit nochmals verlängern.</p>
<p>Lumio schrieb:</p>
<blockquote>
<p>//edit: bzw. warum ist es nicht gut, die Datei binary zu lesen?</p>
</blockquote>
<p>Es kommt darauf an, was du genau machen willst. <code>std::ios::binary</code> garantiert, dass beim Lesen und Speichern die Daten nicht verändert werden. Das mag sinnvoll sein, wenn man wirklich mit binären Files arbeitet, also zum Beispiel einem JPEG. Was nämlich verändert wird, sind Dinge wie ein <code>\n</code> . Wenn du ein Linefeed ausgibst und auf einem Linux System bist, dann bleibt es bei einem Linefeed. Auf Windows wird aus dem Linefeed automatisch ein <code>\r\n</code> . Also es hat durchaus seine Vorteile, <code>std::ios::binary</code> nicht anzugeben, wenn man mit Textfiles arbeitet.</p>
<p>Aber es bleibt halt dabei, es kommt darauf an, was man eigentlich möchte. Will man das File 1:1 kopieren, dann ist <code>std::ios::binary</code> durchaus angebracht.</p>
<p>Übrigens, wurde eigentlich das Problem mit dem Crash nun behoben?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697271</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 17 Apr 2009 13:40:05 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 15:30:24 GMT]]></title><description><![CDATA[<p>Das mit dem Crash wurde indirekt gelöst. Also es wurde durch eine andere Art und weise gelöst. Dennoch wollte ich probieren, wie ich das ganze eben binär einlesen kann.</p>
<p>Ich hab den Code unter <a href="http://www.cplusplus.com/reference/iostream/istream/read/" rel="nofollow">http://www.cplusplus.com/reference/iostream/istream/read/</a> nocheinmal gelesen und probiert. Es klappt, wenn ich ihn eins zu eins in die main-Funktion schreibe.</p>
<p>Wie gesagt, ich hab mir ein Ziel gesetzt, einen kleinen Parser zu basteln. Für das einlesen der Zeilen wird wohl std::ios::binary nicht wirklich benötigt.</p>
<p>Aber welche anderen Arten gibt es noch? Ich weiss, dass es andere Arten gibt, allerdings fallen sie mir nicht ein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Danke für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697356</guid><dc:creator><![CDATA[Lumio]]></dc:creator><pubDate>Fri, 17 Apr 2009 15:30:24 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 15:32:28 GMT]]></title><description><![CDATA[<p>Lumio schrieb:</p>
<blockquote>
<p>Aber welche anderen Arten gibt es noch? Ich weiss, dass es andere Arten gibt, allerdings fallen sie mir nicht ein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Was verstehst du unter anderen Arten? Andere Arten von was? <code>std::ios::binary</code> ist ein Flag, welches man setzt oder nicht. Es gibt keine anderen Arten, es gibt höchstens andere Flags, aber keine, welche etwas in die Richtung von <code>std::ios::binary</code> machen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697361</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 17 Apr 2009 15:32:28 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 22:29:25 GMT]]></title><description><![CDATA[<p>Ja stimmt... danke. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Welche Flags gibt es noch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697581</guid><dc:creator><![CDATA[Lumio]]></dc:creator><pubDate>Fri, 17 Apr 2009 22:29:25 GMT</pubDate></item><item><title><![CDATA[Reply to Einlesen der Datei führt zu Crash on Fri, 17 Apr 2009 22:53:18 GMT]]></title><description><![CDATA[<p><a href="http://www.cplusplus.com/reference/iostream/fstream/open/" rel="nofollow">http://www.cplusplus.com/reference/iostream/fstream/open/</a></p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697587</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 17 Apr 2009 22:53:18 GMT</pubDate></item></channel></rss>