<?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[[SOLVED] dynamische Erzeugung eines Objekts]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte in einer Funktion ein Bild erstellen. Die Größe des Bildes ist aber erst zur Laufzeit bekannt. Dafür habe ich mir nun eine Funktion erstellt. Das ganze läuft vom Prinzip her folgendermaßen:</p>
<pre><code class="language-cpp">void erstelle_bild( /* einige Parameter */, Image* img_y, Image* img_u, Image* img_v )
{
  /* mach dies und das */

  img_y = new Image( rows, cols );
  img_u = new Image( rows, cols );
  img_v = new Image( rows, cols );

  /* an dieser Stelle sind die Zeiger auf die Bilder nutzbar */
}

int main(int argc, char** argv)
{
  Image* img_y = NULL;
  Image* img_u = NULL;
  Image* img_v = NULL;

  erstelle_bild( /* einige Parameter */, img_y, img_u, img_v );

  /* hier zeigen die Pointer img_y, img_u, img_v immernoch auf NULL */
}
</code></pre>
<p>Wo ist mein Denkfehler? Was muss ich ändern, damit ich auf die Speicherbereiche der Bilder nach der Erstellung auch noch in der main zugreifen kann?</p>
<p>Vielen Dank im voraus. mbu.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/217650/solved-dynamische-erzeugung-eines-objekts</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 14:48:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/217650.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 09 Jul 2008 15:18:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [SOLVED] dynamische Erzeugung eines Objekts on Wed, 09 Jul 2008 15:37:59 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte in einer Funktion ein Bild erstellen. Die Größe des Bildes ist aber erst zur Laufzeit bekannt. Dafür habe ich mir nun eine Funktion erstellt. Das ganze läuft vom Prinzip her folgendermaßen:</p>
<pre><code class="language-cpp">void erstelle_bild( /* einige Parameter */, Image* img_y, Image* img_u, Image* img_v )
{
  /* mach dies und das */

  img_y = new Image( rows, cols );
  img_u = new Image( rows, cols );
  img_v = new Image( rows, cols );

  /* an dieser Stelle sind die Zeiger auf die Bilder nutzbar */
}

int main(int argc, char** argv)
{
  Image* img_y = NULL;
  Image* img_u = NULL;
  Image* img_v = NULL;

  erstelle_bild( /* einige Parameter */, img_y, img_u, img_v );

  /* hier zeigen die Pointer img_y, img_u, img_v immernoch auf NULL */
}
</code></pre>
<p>Wo ist mein Denkfehler? Was muss ich ändern, damit ich auf die Speicherbereiche der Bilder nach der Erstellung auch noch in der main zugreifen kann?</p>
<p>Vielen Dank im voraus. mbu.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544382</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544382</guid><dc:creator><![CDATA[mbu]]></dc:creator><pubDate>Wed, 09 Jul 2008 15:37:59 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] dynamische Erzeugung eines Objekts on Wed, 09 Jul 2008 15:22:32 GMT]]></title><description><![CDATA[<p>Einfach img_y, img_u, img_v benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544384</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544384</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 09 Jul 2008 15:22:32 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] dynamische Erzeugung eines Objekts on Wed, 09 Jul 2008 15:24:38 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Einfach img_y, img_u, img_v benutzen.</p>
</blockquote>
<p>Das hat er ja getan, mit dem Ergebnis, immer noch Nullzeiger zu haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544385</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544385</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 09 Jul 2008 15:24:38 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] dynamische Erzeugung eines Objekts on Wed, 09 Jul 2008 15:25:01 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Einfach img_y, img_u, img_v benutzen.</p>
</blockquote>
<p>Entschuldige, aber kann Dir da nicht ganz folgen. An welcher Stelle soll ich das benutzen? In der main? Aber die kann ich ja nicht benutzen, wenn die Zeiger auf NULL zeigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544386</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544386</guid><dc:creator><![CDATA[mbu]]></dc:creator><pubDate>Wed, 09 Jul 2008 15:25:01 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] dynamische Erzeugung eines Objekts on Wed, 09 Jul 2008 15:28:47 GMT]]></title><description><![CDATA[<p>Die Problematik ist nicht zu unterschätzen, das verstehe ich ehrlich gesagt selbst nicht ganz. Die Zeiger sollten ja ihre Adresse auch nach Beenden der Funktion noch haben...</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

void func(int *x, int *y)
{
	x = new int(3);
	y = new int(5);
	std::cout &lt;&lt; x &lt;&lt; &quot; &quot; &lt;&lt; y &lt;&lt; std::endl;    // Ausgabe: 00063CE0 00063D00
}

int main()
{
	int *a = NULL, *b = NULL;
	func(a, b);
	std::cout &lt;&lt; a &lt;&lt; &quot; &quot; &lt;&lt; b &lt;&lt; std::endl;    // Ausgabe: 00000000 00000000 (!!)
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1544389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544389</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 09 Jul 2008 15:28:47 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] dynamische Erzeugung eines Objekts on Wed, 09 Jul 2008 15:33:59 GMT]]></title><description><![CDATA[<p>Sorry, nicht richtig gelesen.</p>
<p>Hier wäre mal ein Doppelpointer angebracht.</p>
<pre><code class="language-cpp">void erstelle_bild( /* einige Parameter */, Image** img_y, Image** img_u, Image** img_v )
{
  /* mach dies und das */

  *img_y = new Image( rows, cols );
  *img_u = new Image( rows, cols );
  *img_v = new Image( rows, cols );

  /* an dieser Stelle sind die Zeiger auf die Bilder nutzbar */
}

int main(int argc, char** argv)
{
  Image* img_y = NULL;
  Image* img_u = NULL;
  Image* img_v = NULL;

  erstelle_bild( /* einige Parameter */, &amp;img_y, &amp;img_u, &amp;img_v );

  /* hier zeigen die Pointer img_y, img_u, img_v immernoch auf NULL */
}
</code></pre>
<p>EDIT:</p>
<p>Nexus. Nein.<br />
Du übergibst ja eine einen Zeiger per value und der ist 0. Also wird kopiert.<br />
Schön nun speicherst du in einem Kopieren Objekt einen Zeiger auf Image. Das hat aber keine Auswirkung auf den Zeiger, den du mal kopiert hast. Also brauchst du einen Zeiger, weil du ja nicht per value, sondern ber reference übergeben willst. Und das geht mit Pointer genau so, wie immer. Mit einem Pointer. Sieht komisch aus, ist aber so. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1544391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544391</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 09 Jul 2008 15:33:59 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] dynamische Erzeugung eines Objekts on Wed, 09 Jul 2008 15:33:18 GMT]]></title><description><![CDATA[<p>Hm, ich habe gerade noch was anderes ausprobiert:</p>
<pre><code class="language-cpp">void erstelle_bild( /* einige Parameter */, Image*&amp; img_y, Image*&amp; img_u, Image*&amp; img_v )
{
  /* mach dies und das */

  img_y = new Image( rows, cols );
  img_u = new Image( rows, cols );
  img_v = new Image( rows, cols );

  /* an dieser Stelle sind die Zeiger auf die Bilder nutzbar */
}

int main(int argc, char** argv)
{
  Image* img_y = NULL;
  Image* img_u = NULL;
  Image* img_v = NULL;

  erstelle_bild( /* einige Parameter */, img_y, img_u, img_v );

  /* hier zeigen die Pointer img_y, img_u, img_v immernoch auf NULL */
}
</code></pre>
<p>Ich habe sozusagen eine Referenz auf einen Pointer erstellt. Damit funktioniert das ganze auch. Allerdings sieht der Parameter <em><em>Image</em>&amp; img_y</em>* etwas eigenartig aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544392</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544392</guid><dc:creator><![CDATA[mbu]]></dc:creator><pubDate>Wed, 09 Jul 2008 15:33:18 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] dynamische Erzeugung eines Objekts on Wed, 09 Jul 2008 15:33:54 GMT]]></title><description><![CDATA[<p>Der Pointer wird ja auch als Value übergeben. Wie soll der sich da ändern?<br />
Du musst den schon als Refernz übergeben, wenn du das wirklich so machen willst, also<br />
void erstelle_bild( Image*&amp; img_y, Image*&amp; img_u, Image*&amp; img_v )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544393</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Wed, 09 Jul 2008 15:33:54 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] dynamische Erzeugung eines Objekts on Wed, 09 Jul 2008 15:36:52 GMT]]></title><description><![CDATA[<p>mbu schrieb:</p>
<blockquote>
<p>Ich habe sozusagen eine Referenz auf einen Pointer erstellt. Damit funktioniert das ganze auch. Allerdings sieht der Parameter <em><em>Image</em>&amp; img_y</em>* etwas eigenartig aus.</p>
</blockquote>
<p>Genau. Und wenn du die Begrünung haben willst, siehe mein Edit von oben oder auch Jockelx.<br />
Referenzen sind hier sogar noch schöner, als Pointer. Ist im Prinzip aber Dasselbe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544394</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544394</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 09 Jul 2008 15:36:52 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] dynamische Erzeugung eines Objekts on Wed, 09 Jul 2008 15:37:18 GMT]]></title><description><![CDATA[<p>Super, alles klar. Dass der Pointer by value übergeben wird, macht natürlich Sinn. Da war also der Denkfehler. Vielen Dank. <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/1544395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544395</guid><dc:creator><![CDATA[mbu]]></dc:creator><pubDate>Wed, 09 Jul 2008 15:37:18 GMT</pubDate></item><item><title><![CDATA[Reply to [SOLVED] dynamische Erzeugung eines Objekts on Wed, 09 Jul 2008 15:37:27 GMT]]></title><description><![CDATA[<p>Wieder was Neues gelernt, und ich dachte, ich würde mich mit Zeigern auskennen <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>Aber ehrlich gesagt finde ich Doppelpointer schöner als Pointer auf Referenz (auch wenn man ihn explizit dereferenzieren muss).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1544397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1544397</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Wed, 09 Jul 2008 15:37:27 GMT</pubDate></item></channel></rss>