<?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[ich versteh&#x27; die Welt nicht mehr..grrr]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich bin gerade dabei, mich wieder ein wenig in C einzuarbeiten und mich dabei gleich auf C++ zu stürzen...</p>
<p>(ich benutze das MinGW Developer Studio unter WinXP Pro)</p>
<p>Dabei bin ich auf folgendes Problem gestoßen. Auch nach mehrstündigem Recherchieren, Probieren und Nachdenken kam ich zu keiner Lösung, obwohl es doch eine so SUPER BILLIGE Sache sein sollte... :</p>
<p>Ich habe eine Stack-Struktur:</p>
<pre><code class="language-cpp">struct Stack{
	char* name;
	char* data;
	Stack* link;
};
</code></pre>
<p>Mit der kann ich umgehen, sie hat mir bisher keine Probleme bereitet, die verschieden Funktionen funzen tadellos.</p>
<p>Desweiteren lese ich zu Übungszwecken alle Zeichen einer Datei in ein C-Zeichenkette ein, und packe diese Zeichen dann in einen String. Über die Effizienz und den Sinn der Sache kann man an anderer Stelle reden. Alles wird anstandslos kompiliert, allerdings kommt es zu einem für mich unerklärlichem Absturz:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &quot;stack.h&quot;

using namespace std;

ifstream input_file(&quot;input.txt&quot;);

int main(int argc, char** argv){

	Stack** ppStack = new Stack*; //Initialisierung der Stack-Struktur
	*ppStack = NULL;

	char* inbuffer = new char;    //Initialisierung von Zeichenkette und String
	string instring = &quot;leer&quot;;

	char a=0;                     //Hilfsvariablen
	int m=0;

	while(!input_file.eof()) {    //alle Zeichen der Datei in Zeichenkette
		input_file.get(a);
		inbuffer[m]=a;
		m++;
	};
	inbuffer[m]='\0';             //Zeichenkette abschließen

	input_file.close();

	instring = inbuffer;          //Zeichenkette in String !ABSTURZ!

	delete inbuffer;

	cout &lt;&lt; &quot;Eingabe= &quot; &lt;&lt; instring &lt;&lt; endl; //Kontrolle
.
.
.
return 0;
}
</code></pre>
<p>Effekt: Bei der Umwandlung der Zeichenkette in den String stürzt das Programm ab <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Ich habe auch etliche Sachen nachgelesen, vom Prinzip her SOLLTE das SO funktionieren.</p>
<p>Aus lauter Verzweiflung habe ich dann auch mal spaßeshalber die Initialisierung des Stacks rausgenommen, zuerst ganz und dann bis zu dem Minimum was nötig ist, damit die String-Sache läuft:</p>
<pre><code class="language-cpp">int main(int argc, char** argv){

    Stack** ppStack;//= new Stack*; //Initialisierung der Stack-Struktur
    //*ppStack = NULL;

    char* inbuffer = new char //...etc
</code></pre>
<p>Und SIEHE DA, die Stringeschichte tut es... return 0 = alles fein... - Natürlich kann ich meinen Stack jetzt nicht mehr benutzen...</p>
<p>Sobald ich den Stack mit <strong>new Stack</strong>* initialisiere, spielt meine String-Umwandlung verrückt (Terminated with return code -1073741819)</p>
<p><strong>WAS HAT DAS EINE MIT DEM ANDEREN ZU TUN?</strong></p>
<p>zumal der Debugger mir in beiden Fällen das selbe für <strong>instring</strong> und <strong>inbuffer</strong> ausgibt...</p>
<p>Kann mir da irgendjemand auf die Sprünge helfen?</p>
<p>Ich wäre für jede Hilfe dankbar! <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/topic/141179/ich-versteh-die-welt-nicht-mehr-grrr</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 10:00:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/141179.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Mar 2006 01:59:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ich versteh&#x27; die Welt nicht mehr..grrr on Mon, 20 Mar 2006 01:59:34 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>ich bin gerade dabei, mich wieder ein wenig in C einzuarbeiten und mich dabei gleich auf C++ zu stürzen...</p>
<p>(ich benutze das MinGW Developer Studio unter WinXP Pro)</p>
<p>Dabei bin ich auf folgendes Problem gestoßen. Auch nach mehrstündigem Recherchieren, Probieren und Nachdenken kam ich zu keiner Lösung, obwohl es doch eine so SUPER BILLIGE Sache sein sollte... :</p>
<p>Ich habe eine Stack-Struktur:</p>
<pre><code class="language-cpp">struct Stack{
	char* name;
	char* data;
	Stack* link;
};
</code></pre>
<p>Mit der kann ich umgehen, sie hat mir bisher keine Probleme bereitet, die verschieden Funktionen funzen tadellos.</p>
<p>Desweiteren lese ich zu Übungszwecken alle Zeichen einer Datei in ein C-Zeichenkette ein, und packe diese Zeichen dann in einen String. Über die Effizienz und den Sinn der Sache kann man an anderer Stelle reden. Alles wird anstandslos kompiliert, allerdings kommt es zu einem für mich unerklärlichem Absturz:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &quot;stack.h&quot;

using namespace std;

ifstream input_file(&quot;input.txt&quot;);

int main(int argc, char** argv){

	Stack** ppStack = new Stack*; //Initialisierung der Stack-Struktur
	*ppStack = NULL;

	char* inbuffer = new char;    //Initialisierung von Zeichenkette und String
	string instring = &quot;leer&quot;;

	char a=0;                     //Hilfsvariablen
	int m=0;

	while(!input_file.eof()) {    //alle Zeichen der Datei in Zeichenkette
		input_file.get(a);
		inbuffer[m]=a;
		m++;
	};
	inbuffer[m]='\0';             //Zeichenkette abschließen

	input_file.close();

	instring = inbuffer;          //Zeichenkette in String !ABSTURZ!

	delete inbuffer;

	cout &lt;&lt; &quot;Eingabe= &quot; &lt;&lt; instring &lt;&lt; endl; //Kontrolle
.
.
.
return 0;
}
</code></pre>
<p>Effekt: Bei der Umwandlung der Zeichenkette in den String stürzt das Programm ab <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
<p>Ich habe auch etliche Sachen nachgelesen, vom Prinzip her SOLLTE das SO funktionieren.</p>
<p>Aus lauter Verzweiflung habe ich dann auch mal spaßeshalber die Initialisierung des Stacks rausgenommen, zuerst ganz und dann bis zu dem Minimum was nötig ist, damit die String-Sache läuft:</p>
<pre><code class="language-cpp">int main(int argc, char** argv){

    Stack** ppStack;//= new Stack*; //Initialisierung der Stack-Struktur
    //*ppStack = NULL;

    char* inbuffer = new char //...etc
</code></pre>
<p>Und SIEHE DA, die Stringeschichte tut es... return 0 = alles fein... - Natürlich kann ich meinen Stack jetzt nicht mehr benutzen...</p>
<p>Sobald ich den Stack mit <strong>new Stack</strong>* initialisiere, spielt meine String-Umwandlung verrückt (Terminated with return code -1073741819)</p>
<p><strong>WAS HAT DAS EINE MIT DEM ANDEREN ZU TUN?</strong></p>
<p>zumal der Debugger mir in beiden Fällen das selbe für <strong>instring</strong> und <strong>inbuffer</strong> ausgibt...</p>
<p>Kann mir da irgendjemand auf die Sprünge helfen?</p>
<p>Ich wäre für jede Hilfe dankbar! <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/1020018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020018</guid><dc:creator><![CDATA[shai_hulud1]]></dc:creator><pubDate>Mon, 20 Mar 2006 01:59:34 GMT</pubDate></item><item><title><![CDATA[Reply to ich versteh&#x27; die Welt nicht mehr..grrr on Mon, 20 Mar 2006 05:00:54 GMT]]></title><description><![CDATA[<p>char* inbuffer = new char;</p>
<p>Damit holst du dir doch nur Speicher für einen Char.<br />
Benutze</p>
<p>char inbuffer[1024];</p>
<p>€dit: Und dann darfst du natürlich am Ende inbuffer nicht per delete löschen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020036</guid><dc:creator><![CDATA[feigling]]></dc:creator><pubDate>Mon, 20 Mar 2006 05:00:54 GMT</pubDate></item><item><title><![CDATA[Reply to ich versteh&#x27; die Welt nicht mehr..grrr on Mon, 20 Mar 2006 09:09:21 GMT]]></title><description><![CDATA[<p>Programmier gleich richtig C++ und benutze doch einfach die Klasse std::string, die dir vieles einfacher und vorallem sicherer macht (keine Bufferoverflows o.ä.).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020111</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Mon, 20 Mar 2006 09:09:21 GMT</pubDate></item><item><title><![CDATA[Reply to ich versteh&#x27; die Welt nicht mehr..grrr on Mon, 20 Mar 2006 11:46:25 GMT]]></title><description><![CDATA[<p>Ich glaube ich sehe meinen Denkfehler...</p>
<p>Um eine Zeichenkette unbekannter Größe anzulegen komme ich also um eine verkette Liste (einzelner Zeichen oder fester Zeichenketten) nicht drumherum, oder? ...Char* also nur in zusammenhängendem Speicher, irgendwie auch verständlich...</p>
<p>Komischerweise hat es funktioniert, wenn ich den Stack rausgenommen habe, aber das kann natürlich eben jenes Problem mit dem Speicher verschleiert haben...</p>
<p>Ganz allgemein gehts mir hier erstmal ums Prinzip, dass ich höchstwahrscheinlich mit Strings arbeiten werde ist mir schon klar, aber es müsste rein funktional auch mit einer Zeichenkette zu machen sein...</p>
<p>Für Anregungen und Berichtigungen bin ich natürlich allzeit dankbar...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020197</guid><dc:creator><![CDATA[shai_hulud1]]></dc:creator><pubDate>Mon, 20 Mar 2006 11:46:25 GMT</pubDate></item><item><title><![CDATA[Reply to ich versteh&#x27; die Welt nicht mehr..grrr on Mon, 20 Mar 2006 11:59:20 GMT]]></title><description><![CDATA[<p>shai_hulud1 schrieb:</p>
<blockquote>
<p>Ich glaube ich sehe meinen Denkfehler...</p>
<p>Um eine Zeichenkette unbekannter Größe anzulegen komme ich also um eine verkette Liste (einzelner Zeichen oder fester Zeichenketten) nicht drumherum, oder? ...Char* also nur in zusammenhängendem Speicher, irgendwie auch verständlich...</p>
</blockquote>
<p>Nein, du kannst auch einen std::string verwenden, dann brauchst du dich gar nicht mehr darum zu kümmern, wieviel Speicher du wo benötigst.</p>
<blockquote>
<p>Komischerweise hat es funktioniert, wenn ich den Stack rausgenommen habe, aber das kann natürlich eben jenes Problem mit dem Speicher verschleiert haben...</p>
</blockquote>
<p>Durchaus möglich - wenn du dir den Speicher nicht reservierst, kann er anderweitig genutzt werden.</p>
<blockquote>
<p>Ganz allgemein gehts mir hier erstmal ums Prinzip, dass ich höchstwahrscheinlich mit Strings arbeiten werde ist mir schon klar, aber es müsste rein funktional auch mit einer Zeichenkette zu machen sein...</p>
<p>Für Anregungen und Berichtigungen bin ich natürlich allzeit dankbar...</p>
</blockquote>
<p>Eine Alternative zu verketteten Listen wäre es, immer ein ausreichend großes Array zu reservieren - und wenn der angeforderte Platz doch nicht reicht, kopierst du alles in einen größeren Bereich (so dürfte ein STL-String arbeiten).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1020201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1020201</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 20 Mar 2006 11:59:20 GMT</pubDate></item></channel></rss>