<?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[sizeof]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe folgende Methode geschrieben:</p>
<pre><code class="language-cpp">// ----------------------------------------------------------------------------
bool ResourceHandler::AddBitmap(const unsigned char *data, int length, const std::string&amp; name)
// ----------------------------------------------------------------------------
{	
	MAP_WXBITMAP_T::iterator it = mapBitmaps.find(name);

	if(it == mapBitmaps.end())
	{
		wxMemoryInputStream is(data, length);
        mapBitmaps[name] = wxBitmap(wxImage(is, wxBITMAP_TYPE_ANY, -1), -1);
		return(true);
	}

	return(false);
}
</code></pre>
<p>Dummerweise muss der benutzer immer die Länge von char *data per sizeof übergeben, wenn ich in der Methode sizeof(data) aufrufe meldet mir der Stream, dass das Bild korrupt ist.<br />
Wo ist da jetzt genau der unterschied?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/222355/sizeof</link><generator>RSS for Node</generator><lastBuildDate>Mon, 05 Oct 2026 03:09:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/222355.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 11 Sep 2008 11:37:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 11:37:54 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe folgende Methode geschrieben:</p>
<pre><code class="language-cpp">// ----------------------------------------------------------------------------
bool ResourceHandler::AddBitmap(const unsigned char *data, int length, const std::string&amp; name)
// ----------------------------------------------------------------------------
{	
	MAP_WXBITMAP_T::iterator it = mapBitmaps.find(name);

	if(it == mapBitmaps.end())
	{
		wxMemoryInputStream is(data, length);
        mapBitmaps[name] = wxBitmap(wxImage(is, wxBITMAP_TYPE_ANY, -1), -1);
		return(true);
	}

	return(false);
}
</code></pre>
<p>Dummerweise muss der benutzer immer die Länge von char *data per sizeof übergeben, wenn ich in der Methode sizeof(data) aufrufe meldet mir der Stream, dass das Bild korrupt ist.<br />
Wo ist da jetzt genau der unterschied?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580239</guid><dc:creator><![CDATA[sizeof(me)==184]]></dc:creator><pubDate>Thu, 11 Sep 2008 11:37:54 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 11:45:40 GMT]]></title><description><![CDATA[<p>Hast du auch sizeof(...)<strong>-1</strong> benutzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580243</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 11 Sep 2008 11:45:40 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 11:48:50 GMT]]></title><description><![CDATA[<p>Wo rufst Du sizeof auf?<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580245</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Thu, 11 Sep 2008 11:48:50 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 11:49:21 GMT]]></title><description><![CDATA[<p>Hab's grad mal ausprobiert. Wenn du data an die Funktion übergibst, dann gibt sizeof nicht mehr die Länge des Arrays zurück, sondern die Länge des Pointers! Ich vermute mal, dass er in der Funktion erstmal nicht sehen kann, ob da denn auch ein Pointer auf ein Array übergeben wird. es ist sowieso nicht verkehrt und absolut üblich, die Länge eines Arrays an eine Funktion mitzuliefern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580246</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 11 Sep 2008 11:49:21 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 11:50:45 GMT]]></title><description><![CDATA[<p>sizeof() auf einen Pointer angewandt liefert die Größe des Pointers, nicht die Größe des Objekts, auf das der Pointer zeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580248</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 11 Sep 2008 11:50:45 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 11:51:43 GMT]]></title><description><![CDATA[<p>_matze schrieb:</p>
<blockquote>
<p>Hab's grad mal ausprobiert. Wenn du data an die Funktion übergibst, dann gibt sizeof nicht mehr die Länge des Arrays zurück, sondern die Länge des Pointers! Ich vermute mal, dass er in der Funktion erstmal nicht sehen kann, ob da denn auch ein Pointer auf ein Array übergeben wird. es ist sowieso nicht verkehrt und absolut üblich, die Länge eines Arrays an eine Funktion mitzuliefern.</p>
</blockquote>
<p>könnte ich denn trotzdem irgendwie casten um den aufrufer jedes mal das sizeof zu ersparen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580250</guid><dc:creator><![CDATA[sizeof(me)]]></dc:creator><pubDate>Thu, 11 Sep 2008 11:51:43 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 11:55:59 GMT]]></title><description><![CDATA[<p>Nein, die Funktion bekommt ja nur einen Zeiger auf den Beginn eines Speicherbereiches. Woran soll die Funktion erkennen, wieviel Byte ab Beginn des Bereiches noch zu den gewünschten Daten gehören?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580255</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580255</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Thu, 11 Sep 2008 11:55:59 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 11:56:16 GMT]]></title><description><![CDATA[<p>nein</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580256</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 11 Sep 2008 11:56:16 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 11:57:39 GMT]]></title><description><![CDATA[<p>sizeof(me) schrieb:</p>
<blockquote>
<p>_matze schrieb:</p>
<blockquote>
<p>Hab's grad mal ausprobiert. Wenn du data an die Funktion übergibst, dann gibt sizeof nicht mehr die Länge des Arrays zurück, sondern die Länge des Pointers! Ich vermute mal, dass er in der Funktion erstmal nicht sehen kann, ob da denn auch ein Pointer auf ein Array übergeben wird. es ist sowieso nicht verkehrt und absolut üblich, die Länge eines Arrays an eine Funktion mitzuliefern.</p>
</blockquote>
<p>könnte ich denn trotzdem irgendwie casten um den aufrufer jedes mal das sizeof zu ersparen?</p>
</blockquote>
<p>Du konntest einen Vektor übergeben, und dann die Funktion so aufrufen:</p>
<pre><code class="language-cpp">wxMemoryInputStream is(&amp;data[0], data.size());
</code></pre>
<p>Das ist für einen Vektor von POD-Typen zwar zulässig, aber eigentlich nicht schön.</p>
<p>Es ist aber auch üblich, dass man Funktionen die mit rohen Arrays arbeiten die Größe mitgibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580257</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 11 Sep 2008 11:57:39 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 11:56:39 GMT]]></title><description><![CDATA[<p>sizeof(me) schrieb:</p>
<blockquote>
<p>könnte ich denn trotzdem irgendwie casten um den aufrufer jedes mal das sizeof zu ersparen?</p>
</blockquote>
<p>Nein. Wenn der Benutzer ein Array übergibt (nur dann würde sizeof auf seiner Seite überhaupt funktionieren), dann ist im Aufruf die Größeninformation nicht mehr da.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580259</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 11 Sep 2008 11:56:39 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 12:02:56 GMT]]></title><description><![CDATA[<p>Alles klar danke leute :)!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580263</guid><dc:creator><![CDATA[sizeof]]></dc:creator><pubDate>Thu, 11 Sep 2008 12:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 12:20:35 GMT]]></title><description><![CDATA[<p>Nur noch mal als Zusatz:</p>
<p>Wäre der erste Parameter was anderes, zB (DerGuteAlteUwe *param), dann könnte man mit sizeof(*param) die Größe ermitteln. Aber bei einem Array hast du halt das Problem das nur auf das erste Element gezeigt wird. Bei einem C-Char-Array kann man sich unter Umständen auf die terminierende Null verlassen, sollte aber nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580272</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 11 Sep 2008 12:20:35 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 12:27:51 GMT]]></title><description><![CDATA[<p>Sorry, Doppelpost...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580276</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 11 Sep 2008 12:27:51 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 12:27:27 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Wäre der erste Parameter was anderes, zB (DerGuteAlteUwe *param), dann könnte man mit sizeof(*param) die Größe ermitteln.</p>
</blockquote>
<p>Genau, dann würde man die Länge des Typs bekommen, die eben auch der Länge der Variable entspricht.</p>
<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Aber bei einem Array hast du halt das Problem das nur auf das erste Element gezeigt wird. Bei einem C-Char-Array kann man sich unter Umständen auf die terminierende Null verlassen, sollte aber nicht.</p>
</blockquote>
<p>Wenn man ein Array mit []-Operator deklariert, dann kann sizeof ja ohne Probleme die Länge des Arrays liefern, auch wenn der Name des Arrays ohne Index nur auf das erste Element zeigt. Da braucht's auch keine terminierende Null. Das Problem entsteht ja erst, wenn ein Pointer auf das Array z.B. an eine andere Funktion übergeben wird, die das dann nicht mehr erkennen kann. Ich vermute mal, bei dynamisch mit malloc erzeugten Arrays (die man ja erstmal nur als Pointer deklariert), wird es das gleiche Problem geben. Die abschließende Null brauchst du aber natürlich bei strlen. Aber da hier Bilddaten verarbeitet werden, bringt ihm diese Info natürlich wenig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580278</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Thu, 11 Sep 2008 12:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 12:27:57 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Nur noch mal als Zusatz:</p>
<p>Wäre der erste Parameter was anderes, zB (DerGuteAlteUwe *param), dann könnte man mit sizeof(*param) die Größe ermitteln. Aber bei einem Array hast du halt das Problem das nur auf das erste Element gezeigt wird. Bei einem C-Char-Array kann man sich unter Umständen auf die terminierende Null verlassen, sollte aber nicht.</p>
</blockquote>
<p>Das geht aber auch nur so lange gut, wie DerGuteAlteUwe nichts auf den Heap packt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580279</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 11 Sep 2008 12:27:57 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 14:05:33 GMT]]></title><description><![CDATA[<p>DerGuteAlteUwe doch nicht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580326</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 11 Sep 2008 14:05:33 GMT</pubDate></item><item><title><![CDATA[Reply to sizeof on Thu, 11 Sep 2008 14:42:53 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1580348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1580348</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 11 Sep 2008 14:42:53 GMT</pubDate></item></channel></rss>