<?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[Speicheradresse einer Variablen übergeben]]></title><description><![CDATA[<p>Hallo,</p>
<p>die Variable <em>nmbr</em> wird später im Code verwendet. Ich muss sie allerdings schon vorher deklarieren, deshalb der char pointer.</p>
<p>Erst im Switch wird dann die genaue größe des Arrays bestimmt. Wie kann ich nun die Adresse der Variable <em>tmp</em> auf die von <em>nmbr</em> richtig übertragen?</p>
<pre><code>char *nmbr = 0;

	switch (direction) {
		case 1: {	
			start = pos - 1;
			char *tmp = new char[pos];
			// ??? nmbr = temp ???
				} break; // true
		case 0: { // ...
	}
</code></pre>
<p>Viele Grüße,<br />
blck</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/315326/speicheradresse-einer-variablen-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Fri, 31 Jul 2026 01:50:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/315326.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 30 Mar 2013 00:40:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicheradresse einer Variablen übergeben on Sat, 30 Mar 2013 00:43:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>die Variable <em>nmbr</em> wird später im Code verwendet. Ich muss sie allerdings schon vorher deklarieren, deshalb der char pointer.</p>
<p>Erst im Switch wird dann die genaue größe des Arrays bestimmt. Wie kann ich nun die Adresse der Variable <em>tmp</em> auf die von <em>nmbr</em> richtig übertragen?</p>
<pre><code>char *nmbr = 0;

	switch (direction) {
		case 1: {	
			start = pos - 1;
			char *tmp = new char[pos];
			// ??? nmbr = temp ???
				} break; // true
		case 0: { // ...
	}
</code></pre>
<p>Viele Grüße,<br />
blck</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2310930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2310930</guid><dc:creator><![CDATA[blckbird]]></dc:creator><pubDate>Sat, 30 Mar 2013 00:43:30 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheradresse einer Variablen übergeben on Sat, 30 Mar 2013 00:48:27 GMT]]></title><description><![CDATA[<p>blckbird schrieb:</p>
<blockquote>
<p>die Variable <em>nmbr</em> wird später im Code verwendet. Ich muss sie allerdings schon vorher deklarieren, deshalb der char pointer.</p>
</blockquote>
<p>Wieso wird sie dann auf 0 gesetzt?</p>
<p>blckbird schrieb:</p>
<blockquote>
<p>rst im Switch wird dann die genaue größe des Arrays bestimmt. Wie kann ich nun die Adresse der Variable <em>tmp</em> auf die von <em>nmbr</em> richtig übertragen?</p>
</blockquote>
<p>Wozu überhaupt <code>tmp</code> ?</p>
<pre><code class="language-cpp">case 1:
  start = pos - 1;
  nmber = new char[pos];
  break;
</code></pre>
<p>(ansonsten &quot; <code>nmber = tmp;</code> &quot;, das geht prima, <a href="http://www.youtube.com/watch?v=6pmWojisM_E" rel="nofollow">http://www.youtube.com/watch?v=6pmWojisM_E</a>)</p>
<p>blckbird schrieb:</p>
<blockquote>
<pre><code class="language-cpp">new char[pos];
</code></pre>
</blockquote>
<p>Weshalb new?<br />
<a href="http://www.c-plusplus.net/forum/p2308764#2308764" rel="nofollow">Übersetzungstabelle</a><br />
Es gibt hier keinen Grund, nicht <code>std::vector&lt;char&gt;</code> zu nutzen (ausser ev. <code>std::string</code> ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2310931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2310931</guid><dc:creator><![CDATA[urgtusvn]]></dc:creator><pubDate>Sat, 30 Mar 2013 00:48:27 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheradresse einer Variablen übergeben on Sat, 30 Mar 2013 08:47:52 GMT]]></title><description><![CDATA[<p>Wenn nmbr nur in case deklariert wird, dann erhalte ich eine Fehlermeldung, dass die nicht definierte Vraible verwendet wurde. Deshalb der Umweg. Auch das setzten auf 0 hängt damit zusammen.</p>
<p>nmbr = tmp funktioniert nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2310948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2310948</guid><dc:creator><![CDATA[blckbird]]></dc:creator><pubDate>Sat, 30 Mar 2013 08:47:52 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheradresse einer Variablen übergeben on Sat, 30 Mar 2013 09:10:55 GMT]]></title><description><![CDATA[<p>nmbr = tmp funktioniert<br />
nmbr = new char[..] funktioniert<br />
std::vector&lt;char&gt; v;<br />
...<br />
v.resize(..) funktioniert und ist besser. Falls du immer noch Probleme hast poste vollständig kompilierbaren Code, oder zumindest das was deiner Meinung nach kompilieren soll und eine entsprechende Fehlermeldung produziert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2310954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2310954</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 30 Mar 2013 09:10:55 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheradresse einer Variablen übergeben on Sat, 30 Mar 2013 09:52:30 GMT]]></title><description><![CDATA[<pre><code>// direction == true --&gt; LEFT
	// direction == false --&gt; RIGHT

	//char *nmbr = new char[125];
	int j = 0, start;
	char *nmbr = 0;

	// Set start of capturing term position
	switch (direction) {
		case 1: {	
			start = pos - 1;
			char *tmp = new char[pos];
			nmbr = &amp;(*tmp);
				} break; // true
		case 0: { 
			start = pos + 1;

			int i = 0;
			for (i; is_math_char(eq[i]) == true; i++){}

			char *tmp = new char[i - pos - 1];	
			nmbr = &amp;(*tmp);
			} break; // false
	}

	//Case 1 - Term is Number
	if (is_nmbr(eq[start]) == true) { 

		for (int i = start; is_nmbr(eq[i]) == true &amp;&amp; i &gt;= 0;) {
			nmbr[j] = eq[i];
			j++;

			switch (direction) {
				case 1: { i--; } break; // true
				case 0: { i++; } break; // false
			}
		}

		cout &lt;&lt; &quot;NMBR LENGTH: &quot; &lt;&lt; strlen(nmbr)&lt;&lt; endl &lt;&lt; &amp;nmbr &lt;&lt; endl;
		return nmbr;
	}

	return &quot;FAIL&quot;;
}
</code></pre>
<p>Ich lasse mir ja die Länge nmbr ausgeben und da bekomme ich immer 16. Später wird auch noch nmbr ausgegeben. In eq steht ein mathematischer Term. Der Algorithmus soll den linken, bzw. rechten Term zurückgeben.<br />
Wenn nmbr ausgegeben wird, erhalte ich sowas: &quot;21²²²²½½½½½½½½&quot; (die 21 kommt aus dem Term, ist also korrekt).</p>
<p>nmbr = tmp funktioniert, aber ich denke der Fehler liegt dann an einer anderen Stelle. Wieso ist das char-Array dann 16 groß?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2310962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2310962</guid><dc:creator><![CDATA[blckbird]]></dc:creator><pubDate>Sat, 30 Mar 2013 09:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheradresse einer Variablen übergeben on Sat, 30 Mar 2013 09:52:47 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Falls du immer noch Probleme hast poste vollständig kompilierbaren Code, oder zumindest das was deiner Meinung nach kompilieren soll und eine entsprechende Fehlermeldung produziert.</p>
</blockquote>
<p>Ich kann deinen Code nciht kompilieren, blckbird.<br />
Poste mal ein Minimalbeispiel.<br />
Übrigens: nmbr = &amp;(*tmp); ist das selbe wie nmbr = tmp;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2310964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2310964</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Sat, 30 Mar 2013 09:52:47 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheradresse einer Variablen übergeben on Sat, 30 Mar 2013 10:28:08 GMT]]></title><description><![CDATA[<pre><code>// ConsoleApplication4.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//

#include &quot;stdafx.h&quot;
#include &lt;iostream&gt;

using namespace std;

bool is_nmbr(char charakter) {
    if (charakter == '1' || charakter == '2' || charakter == '3' || charakter == '4' || charakter == '5' ||
        charakter == '6' || charakter == '7' || charakter == '8' || charakter == '9' || charakter == '0')
        { return true; }
    else { return false; }
}

bool is_math_char(char term)
{
    if ((is_nmbr(term)) == true ||  term == '(' ||  term == ')' ||  term == '^' ||  term == '*' ||  
        term == '/' ||  term == '+' ||  term == '-' ||  term == '.')
    { return true; }
    else
    { return false; }
}

int _tmain(int argc, _TCHAR* argv[])
{
    // parameter
    bool direction = true; 
    int pos = 2; // Position des &quot;hoch&quot; Zeichens
    char *eq = &quot;12^34&quot;;

	cout &lt;&lt; &quot;INPUT EQ: &quot; &lt;&lt; eq &lt;&lt; endl &lt;&lt; endl;

    // direction == true --&gt; LEFT
    // direction == false --&gt; RIGHT

    //char *nmbr = new char[125];
    int j = 0, start;
    char *nmbr = 0;

    // Set start of capturing term position
    switch (direction) {
        case 1: {  
            start = pos - 1;
            char *tmp = new char[pos];
            nmbr = tmp;
            cout &lt;&lt; &quot;TMP ADRESS: &quot; &lt;&lt; &amp;tmp &lt;&lt; endl;
                } break; // true
        case 0: {
            /*start = pos + 1;

            int i = 0;
            for (i; is_math_char(eq[i]) == true; i++){}

            char *tmp = new char[i - pos - 1]; 
            nmbr = tmp;
            cout &lt;&lt; &quot;TMP ADRESS: &quot; &lt;&lt; &amp;tmp &lt;&lt; endl;*/ // Nicht relevant
            } break; // false
    }

    //Case 1 - Number
    if (is_nmbr(eq[start]) == true) {

        for (int i = start; is_nmbr(eq[i]) == true &amp;&amp; i &gt;= 0;) {
            nmbr[j] = eq[i];
            j++;

            switch (direction) {
                case 1: { i--; } break; // true
                case 0: { i++; } break; // false
            }
        }
        //if (direction == true)
            //{nmbr = order(nmbr);}
        cout &lt;&lt; &quot;NMBR LENGTH: &quot; &lt;&lt; strlen(nmbr)&lt;&lt; endl &lt;&lt; &quot;NMBR ADRESS: &quot; &lt;&lt; &amp;nmbr &lt;&lt; endl &lt;&lt; &quot;NMBR: &quot; &lt;&lt; nmbr &lt;&lt; endl &lt;&lt; endl;

    }

    system(&quot;PAUSE&quot;);
    return 0;
}
</code></pre>
<p>Das ist ein Minimalbeispiel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2310973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2310973</guid><dc:creator><![CDATA[blckbird]]></dc:creator><pubDate>Sat, 30 Mar 2013 10:28:08 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheradresse einer Variablen übergeben on Sat, 30 Mar 2013 11:03:22 GMT]]></title><description><![CDATA[<p>Nachdem ich den Microsoft-Kram entfernt habe (tmain, TCHAR, stdafx) kompiliert das bei mir: <a href="https://ideone.com/2yy2Bh" rel="nofollow">https://ideone.com/2yy2Bh</a> Wo ist das Problem? Edit: Was soll denn bitte &amp;nmbr und &amp;tmp sein? O_o Das sind Pointer. Willst du wirklich die Adressen von Pointern ausgeben? Oder nicht eher das, worauf sie zeigen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2310982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2310982</guid><dc:creator><![CDATA[cooky451]]></dc:creator><pubDate>Sat, 30 Mar 2013 11:03:22 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheradresse einer Variablen übergeben on Tue, 02 Apr 2013 05:39:35 GMT]]></title><description><![CDATA[<p>cooky451 schrieb:</p>
<blockquote>
<p>Nachdem ich den Microsoft-Kram entfernt habe (tmain, TCHAR, stdafx) kompiliert das bei mir: <a href="https://ideone.com/2yy2Bh" rel="nofollow">https://ideone.com/2yy2Bh</a> Wo ist das Problem? Edit: Was soll denn bitte &amp;nmbr und &amp;tmp sein? O_o Das sind Pointer. Willst du wirklich die Adressen von Pointern ausgeben? Oder nicht eher das, worauf sie zeigen?</p>
</blockquote>
<p>Das kann doch nicht sein...<br />
Die Ausgabe ist bei mir anders, ich erhalte für NMBR LENGT - 16 und für NMBR - 21²²²²½½½½½½½½.<br />
Auch wenn ich mit Breakpoints compiliere, sehe ich, dass das Array nicht richtig gekürzt wird...</p>
<p>P.S.: Die Adressen habe ich nur aus Interesse ausgeben lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311597</guid><dc:creator><![CDATA[blckbird]]></dc:creator><pubDate>Tue, 02 Apr 2013 05:39:35 GMT</pubDate></item><item><title><![CDATA[Reply to Speicheradresse einer Variablen übergeben on Tue, 02 Apr 2013 05:49:54 GMT]]></title><description><![CDATA[<p>blckbird schrieb:</p>
<blockquote>
<p>ich erhalte für NMBR LENGT - 16 und für NMBR - 21²²²²½½½½½½½½.</p>
</blockquote>
<p>Wenn du char-Arrays für Strings benutzt, musst du darauf achten, deine Strings durch Nullzeichen zu terminieren. Sowohl die Ausgabefunktionen als auch strlen erwarten eine Nullterminierung.</p>
<p>Besser wäre, nicht mit Arrays und Zeigern zu hantieren, sondern mit std::string und std::vector, weil genau solche Probleme (und das Speicherleck in deinem Code) damit nicht auftreten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2311598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2311598</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 02 Apr 2013 05:49:54 GMT</pubDate></item></channel></rss>