<?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[Problem mit Zeiger]]></title><description><![CDATA[<p>Warum schließt sich das Programm sofort wieder wenn man schreibt:</p>
<p>*addr = 3;</p>
<p>Das ASCII Zeichen 3 wird zwar ausgebene aber danach schließt sich die Konsole sofort wieder.</p>
<p>Es sein dem man schreib 2mal system(&quot;PAUSE&quot;); unten am Ende dann schließt sich die Konsole nicht.</p>
<p>Woran liegt das ?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{

char *buf = &quot;A&quot;;
char *var= 0 ;

int  *addr =0;

var = buf;

addr = (int*) var ;
*addr = 3 ;

cout&lt;&lt;*buf;

 system(&quot;PAUSE&quot;);

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/274490/problem-mit-zeiger</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 14:10:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/274490.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Sep 2010 10:10:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Zeiger on Mon, 27 Sep 2010 10:10:56 GMT]]></title><description><![CDATA[<p>Warum schließt sich das Programm sofort wieder wenn man schreibt:</p>
<p>*addr = 3;</p>
<p>Das ASCII Zeichen 3 wird zwar ausgebene aber danach schließt sich die Konsole sofort wieder.</p>
<p>Es sein dem man schreib 2mal system(&quot;PAUSE&quot;); unten am Ende dann schließt sich die Konsole nicht.</p>
<p>Woran liegt das ?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{

char *buf = &quot;A&quot;;
char *var= 0 ;

int  *addr =0;

var = buf;

addr = (int*) var ;
*addr = 3 ;

cout&lt;&lt;*buf;

 system(&quot;PAUSE&quot;);

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1957956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957956</guid><dc:creator><![CDATA[frage_*_]]></dc:creator><pubDate>Mon, 27 Sep 2010 10:10:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zeiger on Mon, 27 Sep 2010 10:40:10 GMT]]></title><description><![CDATA[<p>system(&quot;pause&quot;) ist vermeidbar und sollte vermieden werden.<br />
Ruf deine Konsolenanwendung über die Konsole auf (wie es sich gehört), dann schliesst sich auch dein Fenster nicht. Wenn man nur doppelklickt, dann is klar dass sich das Fenster wieder schliesst.<br />
Oder starte es im Debugger und setze am Ende einen Breakpoint. Ansonsten gibts zu system(&quot;pause&quot;) massig Threads hier im Forum.<br />
rya.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957974</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 27 Sep 2010 10:40:10 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zeiger on Mon, 27 Sep 2010 10:42:49 GMT]]></title><description><![CDATA[<p>Beispielsweise gibt's hier (bis unten lesen!) eine Alternative:</p>
<p><a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-257376.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-257376.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957975</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Mon, 27 Sep 2010 10:42:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zeiger on Mon, 27 Sep 2010 10:52:54 GMT]]></title><description><![CDATA[<p>Deine Zeigeroperationen sind übrigens gänzlich falsch. Möglich, dass dein Programm deswegen einfach abstürzt, ohne bis zum system zu kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957979</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 27 Sep 2010 10:52:54 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zeiger on Mon, 27 Sep 2010 11:00:22 GMT]]></title><description><![CDATA[<p>frage_*_ schrieb:</p>
<blockquote>
<pre><code class="language-cpp">int main()
{
char *buf = &quot;A&quot;;
char *var= 0 ;
int  *addr =0;
var = buf;
addr = (int*) var ;
*addr = 3 ;
cout&lt;&lt;*buf;
</code></pre>
</blockquote>
<p>Das Stringliteral in Zeile 3 veranlässt den Compiler ein Array mit statischer Lebenszeit anzulegen (char[2] mit 'A', '\0'). Diese Zeile initialisiert den Zeiger mit der Adresse des ersten Zeichens des Arrays. buf zeigt damit auf das Zeichen A. Beachte, diese Zuweisung ist nur aufgrund der Abwärtskompatibilität mit C zulässig. Stringliterale dürfen in beiden Sprachen nicht geändert werden. In C++ sollte man daher auch Zeiger auf const char für sie benutzen, also:</p>
<pre><code class="language-cpp">char const *buf = &quot;A&quot;;
</code></pre>
<p>In Zeile 7 weist Du dem Zeiger addr über einen &quot;versteckten&quot; Reinterpret-Cast die Adresse des ersten Zeichens des Stringliterals zu. Dieser Cast ist schon allein deswegen problematisch, weil die Adresse in var keine gültige Adresse für addr sein muss (siehe <a href="http://de.wikipedia.org/wiki/Speicherausrichtung" rel="nofollow">Speicherausrichtung</a>). In Zeile 8 dereferenzierst Du den Zeiger addr um den int-Wert 3 an der Stelle abzulegen, wohin der Zeiger zeigt. Damit versuchst Du das Stringliteral zu ändern, was nicht erlaubt ist. Es ruft undefiniertes Verhalten (UB) hervor und ein Programmabsturz ist eines von vielen möglichen Verhalten von UB (da ja nicht definiert ist, wie sich der Compiler bzw das Programm verhalten soll).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1957980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1957980</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 27 Sep 2010 11:00:22 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zeiger on Mon, 27 Sep 2010 11:37:53 GMT]]></title><description><![CDATA[<p>So funktioniert es:</p>
<p>mit</p>
<p>cin.sync();<br />
cin.get();</p>
<p>geht es auch.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;

int main()
{

char *p=&quot;PAUSE&quot;;

char *buf = &quot;A&quot;;
char *var= 0 ;

int  *addr =0;

var = buf;

addr = (int*) var ;
*addr = 3 ;

cout&lt;&lt;*buf;

system ( p ) ;
}

Wenn ich einfach schreibe system(&quot;PAUSE&quot;); dann wird das Wort Pause wohl irgendwie überschrieben. ( hab ich nur flüchtig mit dem Debugger überprüft ).

Hat jemand für mein Vorhaben vielleicht eine bessere Lösung ?
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1958000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958000</guid><dc:creator><![CDATA[frage_*_]]></dc:creator><pubDate>Mon, 27 Sep 2010 11:37:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zeiger on Mon, 27 Sep 2010 11:45:42 GMT]]></title><description><![CDATA[<p>frage_*_ schrieb:</p>
<blockquote>
<p>Woran liegt das ?</p>
</blockquote>
<p>evtl. liegt das &quot;PAUSE&quot; im compilierten programm iwo bei deinem &quot;A&quot; mit deiner zeiger convertierung auf (int*) greifst du auch auf die nächsten 3 buchstaben zu die dann evtl. die buchstaben &quot;PAU&quot; enthalten. somit rufst dann am ende statt<br />
system(&quot;PAUSE&quot;); system(&quot;XXXSE&quot;); wobei die drei X für was beliebiges stehen was wie wo da genau ist hängt denke ich auch von der byteorder ab <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958003</guid><dc:creator><![CDATA[RageR]]></dc:creator><pubDate>Mon, 27 Sep 2010 11:45:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zeiger on Mon, 27 Sep 2010 11:48:15 GMT]]></title><description><![CDATA[<p>frage_*_ schrieb:</p>
<blockquote>
<p>Wenn ich einfach schreibe system(&quot;PAUSE&quot;); dann wird das Wort Pause wohl irgendwie überschrieben. ( hab ich nur flüchtig mit dem Debugger überprüft ).</p>
</blockquote>
<p>ja das liegt daran dass gleiche strings vom compiler zusammengefasst werden (sie sollten ja idr auch schreibgeschützt sein). wenn du allerdings mit zeigern dir zugriff verschaffst kann das probleme geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958005</guid><dc:creator><![CDATA[RageR]]></dc:creator><pubDate>Mon, 27 Sep 2010 11:48:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zeiger on Mon, 27 Sep 2010 11:49:02 GMT]]></title><description><![CDATA[<p>frage_*_ schrieb:</p>
<blockquote>
<p>Wenn ich einfach schreibe system(&quot;PAUSE&quot;); dann wird das Wort Pause wohl irgendwie überschrieben. ( hab ich nur flüchtig mit dem Debugger überprüft ).</p>
</blockquote>
<p>ja das liegt daran dass gleiche strings vom compiler zusammengefasst werden (sie sollten ja idr auch schreibgeschützt sein). wenn du allerdings mit zeigern dir zugriff verschaffst kann das probleme geben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958006</guid><dc:creator><![CDATA[RageR]]></dc:creator><pubDate>Mon, 27 Sep 2010 11:49:02 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zeiger on Mon, 27 Sep 2010 11:58:15 GMT]]></title><description><![CDATA[<p>frage_*_ schrieb:</p>
<blockquote>
<p>So funktioniert es:</p>
</blockquote>
<p>Mag sein, dass es zu funktionieren scheint. Du hast aber immer noch undefiniertes Verhalten!</p>
<p>frage_*_ schrieb:</p>
<blockquote>
<p>Wenn ich einfach schreibe system(&quot;PAUSE&quot;); dann wird das Wort Pause wohl irgendwie überschrieben. ( hab ich nur flüchtig mit dem Debugger überprüft ).</p>
</blockquote>
<p>Das kann man erklären. Der Compiler hat im ersten Fall möglicherweise die Zeichenketten so im Speicher abgelegt</p>
<pre><code>buf,var
 addr     p
  |       |
  V       V
+---+---+---+---+---+---+---+---+
| A |\0 | P | A | U | S | E |\0 |      (vorher)
+---+---+---+---+---+---+---+---+

+---+---+---+---+---+---+---+---+
| x | x | x | x | U | S | E |\0 |      (nachher)
+---+---+---+---+---+---+---+---+

(wobei 'x' die Repräsentierung der int-Zahl 3 im Speicher ist)
</code></pre>
<p>Nach Deiner Änderung sah es <em>vielleicht</em> so aus:</p>
<pre><code>buf,var
  p                     addr
  |                       |
  V                       V
+---+---+---+---+---+---+---+---+---+---+
| P | A | U | S | E |\0 | A |\0 | ? | ? |   (vorher)
+---+---+---+---+---+---+---+---+---+---+

+---+---+---+---+---+---+---+---+---+---+
| P | A | U | S | E |\0 | x | x | x | x |   (vorher)
+---+---+---+---+---+---+---+---+---+---+
</code></pre>
<p>Du hast wieder ein Stringliteral verbotenerweise verändert, und wieder über das Ende hinaus hinausgescrieben. Das erste ist aber schon schlimm genug.</p>
<p>Nochmal zum mitschreiben:<br />
- Stringliterale dürfen nicht verändert werden!<br />
- char*-Zeiger darf man nicht so einfach zu int* konvertieren. Das könnte ein Alignment-Problem geben.</p>
<p>Schalte bitte die Compiler-Warnungen ein und lass erstmal die Finger von C-Style Casts. Du sagst dem Compiler damit, dass Du wüsstest, was Du tust. Das scheint aber nicht der Fall zu sein.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958011</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958011</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 27 Sep 2010 11:58:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Zeiger on Mon, 27 Sep 2010 12:08:31 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> hab ich doch glatt die &quot;\0&quot; vergessen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1958020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1958020</guid><dc:creator><![CDATA[RageR]]></dc:creator><pubDate>Mon, 27 Sep 2010 12:08:31 GMT</pubDate></item></channel></rss>