<?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[Zeiger als Parameter]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe folgende Verständnisfrage:<br />
Ich übergebe der folgenden Methode per Referenz einen CString und einen int-Wert, um innerhalb der Funktion den &quot;Originalen&quot; Werte zuzuweisen.<br />
Außerdem möchte ich innerhalb der Methode ein Feld von int-Werten zuweisen (dritter Parameter: int* pData), wobei ich hier den Zeiger nicht einfach auf die Adresse des anderen setzen, sondern eine elementweise Kopie erzeugen will. Jetzt steht allerdings erst innerhalb der Funktion fest, wieviele Elemente dieses int-Feld haben wird. Ich wollte das mittels Zeile (*) lösen, allerdings funktioniert das offensichtlich nicht so, wie ich mir das vorstelle.</p>
<pre><code class="language-cpp">CString Text;
    short nAnzahl;
    short *pData = NULL;
</code></pre>
<pre><code class="language-cpp">void CData::GetData(CString&amp; Text, int&amp; nAnzahl, int* pData) const
{
	Text = m_Text;
	nAnzahl = m_nAnzahl;
	pData = new short[m_nAnzahl]; // (*)
	for (int nIndex = 0; nIndex &lt; m_nAnzahl; nIndex++)
		pData[nIndex] = m_pData[nIndex];
}
</code></pre>
<p>Nach Verlassen der Funktion steht der Zeiger wieder auf NULL.<br />
Mir ist nun zum einen nicht wirklich klar, warum das so ist und zum anderen weiß ich nicht, wie ich das Problem umgehen kann. (Ich möchte der Methode die zu Initialisierenden Elemente übergeben.)</p>
<p>Würde mich freuen, wenn mir das jemand kurz erläutern kann.</p>
<p>Danke vorab,<br />
Nanuq</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/161242/zeiger-als-parameter</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 18:17:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/161242.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Oct 2006 18:09:59 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zeiger als Parameter on Wed, 04 Oct 2006 18:09:59 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe folgende Verständnisfrage:<br />
Ich übergebe der folgenden Methode per Referenz einen CString und einen int-Wert, um innerhalb der Funktion den &quot;Originalen&quot; Werte zuzuweisen.<br />
Außerdem möchte ich innerhalb der Methode ein Feld von int-Werten zuweisen (dritter Parameter: int* pData), wobei ich hier den Zeiger nicht einfach auf die Adresse des anderen setzen, sondern eine elementweise Kopie erzeugen will. Jetzt steht allerdings erst innerhalb der Funktion fest, wieviele Elemente dieses int-Feld haben wird. Ich wollte das mittels Zeile (*) lösen, allerdings funktioniert das offensichtlich nicht so, wie ich mir das vorstelle.</p>
<pre><code class="language-cpp">CString Text;
    short nAnzahl;
    short *pData = NULL;
</code></pre>
<pre><code class="language-cpp">void CData::GetData(CString&amp; Text, int&amp; nAnzahl, int* pData) const
{
	Text = m_Text;
	nAnzahl = m_nAnzahl;
	pData = new short[m_nAnzahl]; // (*)
	for (int nIndex = 0; nIndex &lt; m_nAnzahl; nIndex++)
		pData[nIndex] = m_pData[nIndex];
}
</code></pre>
<p>Nach Verlassen der Funktion steht der Zeiger wieder auf NULL.<br />
Mir ist nun zum einen nicht wirklich klar, warum das so ist und zum anderen weiß ich nicht, wie ich das Problem umgehen kann. (Ich möchte der Methode die zu Initialisierenden Elemente übergeben.)</p>
<p>Würde mich freuen, wenn mir das jemand kurz erläutern kann.</p>
<p>Danke vorab,<br />
Nanuq</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149425</guid><dc:creator><![CDATA[Nanuq]]></dc:creator><pubDate>Wed, 04 Oct 2006 18:09:59 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Parameter on Wed, 04 Oct 2006 18:17:03 GMT]]></title><description><![CDATA[<p>Nunja, auch Zeiger kann man by-value und by-reference übergeben. Du übergibst hier den Zeiger pData by-value, empfängst also das was beim Aufruf von GetData an diese Funktion übergeben wird. Dieser Wert (bessergesagt die Adresse, also 0) wird nach pData <strong>kopiert</strong>. Dann änderst Du die Kopie, und handelst Dir damit sogar noch ein Speicherleck ein (da der mit new allokierte Speicher ausserhalb der Funktion nicht mehr verfügbar ist).</p>
<p>Wie gesagt, auch den Zeiger müsstest Du by-reference übergeben:</p>
<pre><code class="language-cpp">void CData::GetData(CString&amp; Text, int&amp; nAnzahl, int*&amp; pData) const
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1149432</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149432</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 04 Oct 2006 18:17:03 GMT</pubDate></item><item><title><![CDATA[Reply to Zeiger als Parameter on Wed, 04 Oct 2006 18:30:20 GMT]]></title><description><![CDATA[<blockquote>
<p>auch Zeiger kann man by-value und by-reference übergeben</p>
</blockquote>
<p>Das war mir nicht bewusst, obwohl es eigentlich völlig logisch ist. Naja, vielen Dank jedenfalls!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1149443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1149443</guid><dc:creator><![CDATA[Nanuq]]></dc:creator><pubDate>Wed, 04 Oct 2006 18:30:20 GMT</pubDate></item></channel></rss>