<?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[feld-inhalt per memset initialisieren klappt nicht ...]]></title><description><![CDATA[<p>hallo,</p>
<p>sehe der wald vor lauter baeumen nicht:</p>
<pre><code>// ///////////////////////////////////////
int main( int argc, char *argv[] )
// ///////////////////////////////////////
{
  ushort tmp[MAX_FIELD];
  memset(tmp,(ushort)0x6, MAX_FIELD * sizeof(tmp[0]));
</code></pre>
<p>nach ausfuehrung von memset beinhalten alle felder von tmp den wert 0x0606 !?!?!</p>
<p>was mache ich falsch?<br />
danke vorab.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/289907/feld-inhalt-per-memset-initialisieren-klappt-nicht</link><generator>RSS for Node</generator><lastBuildDate>Tue, 18 Aug 2026 18:47:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/289907.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Jul 2011 10:10:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Fri, 15 Jul 2011 10:10:46 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>sehe der wald vor lauter baeumen nicht:</p>
<pre><code>// ///////////////////////////////////////
int main( int argc, char *argv[] )
// ///////////////////////////////////////
{
  ushort tmp[MAX_FIELD];
  memset(tmp,(ushort)0x6, MAX_FIELD * sizeof(tmp[0]));
</code></pre>
<p>nach ausfuehrung von memset beinhalten alle felder von tmp den wert 0x0606 !?!?!</p>
<p>was mache ich falsch?<br />
danke vorab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093038</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Fri, 15 Jul 2011 10:10:46 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Fri, 15 Jul 2011 10:12:25 GMT]]></title><description><![CDATA[<p>den vollstaendigen beispielcode:</p>
<pre><code>// ///////////////////////////////////////
int main( int argc, char *argv[] )
// ///////////////////////////////////////
{
  const ushort MAX_FIELD = 14;
  ushort tmp[MAX_FIELD];
  memset(tmp,(ushort)0x6, MAX_FIELD * sizeof(tmp[0])); 	
  return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2093039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093039</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Fri, 15 Jul 2011 10:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Fri, 15 Jul 2011 10:12:59 GMT]]></title><description><![CDATA[<p>memset setzt den wert byteweise. Dein 0x6, das du ja in ushort castet, castet dir memset einfach in unsigned char um, und setzt jedes byte mit 0x6.<br />
Schau dir mal std::fill an, das macht das, was du willst</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093040</guid><dc:creator><![CDATA[asdfasd]]></dc:creator><pubDate>Fri, 15 Jul 2011 10:12:59 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Fri, 15 Jul 2011 10:17:45 GMT]]></title><description><![CDATA[<p>danke fuer die rasche antwort.<br />
hast recht, memset arbeitet byteweise.</p>
<p>statt memset muesste es also sein:</p>
<pre><code>std::fill(tmp, tmp+MAX_FIELD, 0x6);
</code></pre>
<p>da benutzt man jahrelang memset um feldinhalte auf 0 zu setzen, und wenns mal was anderes sein soll, merkt man erst, dass man die arbeitsweise von memset garnicht so wahrgenommen hat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>vielen dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093043</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Fri, 15 Jul 2011 10:17:45 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Fri, 15 Jul 2011 10:45:23 GMT]]></title><description><![CDATA[<p>Wobei i.d.R. ein <code>memset( ,0, )</code> intern versucht die Registerbreite des Prozessors ausnutzen. Der std::fill vermutlich ebenso.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093060</guid><dc:creator><![CDATA[holzeimer]]></dc:creator><pubDate>Fri, 15 Jul 2011 10:45:23 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Fri, 15 Jul 2011 14:29:20 GMT]]></title><description><![CDATA[<p>Was spricht denn eigentlich dagegen, STL-Container zu verwenden?</p>
<pre><code class="language-cpp">std::vector&lt;ushort&gt; tmp(MAX_FIELD,0x6);
</code></pre>
<p>ist doch viel kompakter zu schreiben und sagt genau das aus, was du willst.<br />
(alternativ kannst du auch mit array&lt;&gt; arbeiten, wenn dir feste Größe reicht (afair in Boost, TR1 oder dem neuen Standard verfügbar))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2093190</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2093190</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 15 Jul 2011 14:29:20 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Mon, 18 Jul 2011 09:43:37 GMT]]></title><description><![CDATA[<p>immer wieder bemerkenswert in was fuer komischen schleifen man denkt:<br />
das einfachste ist natuerlich ein STL-vector mit der vorgeschlagenen<br />
konstruktion und reicht voellig aus.</p>
<p>vielen dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2094161</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2094161</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Mon, 18 Jul 2011 09:43:37 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Mon, 18 Jul 2011 10:18:40 GMT]]></title><description><![CDATA[<p>wo wir beim thema memset sind</p>
<p>sowas ist ja nicht gerade ratsam hier:</p>
<pre><code class="language-cpp">struct Foo
{
    int a;
    int b;
    char c;
    double d; // ;)
    std::string tanga;

    Foo(void) {
        memset(this, 0, sizeof(*this));  // NICHT NACHMACHEN !
    }
};
</code></pre>
<p>da es ja C-Style ist. gibt es da eine einfache möglichkeit alles auf 0 zu setzen</p>
<p>und da genau das hier bei dem std container gehörig crashen wird, soll dieser per standard konstruktor initalisiert werden...</p>
<p>geht sowas recht einfach?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2094189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2094189</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 18 Jul 2011 10:18:40 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Mon, 18 Jul 2011 15:25:10 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>da es ja C-Style ist. gibt es da eine einfache möglichkeit alles auf 0 zu setzen</p>
</blockquote>
<p>Klar. Alles mit 0 initialisieren.</p>
<p>Es gibt zB die möglichkeit eine ZeroFill Klasse zu schreiben:</p>
<pre><code class="language-cpp">//roher draft
template&lt;typename T&gt;
class ZeroFill {
private:
   T obj;

public:
   ZeroFill() : obj(0) {}
   operator T() { return obj; }
};
</code></pre>
<p>Einfach immer bei der Initialisierung zuweisen. Objekte sollten sowieso einen sinnvollen Default CTor haben der die Werte mit 0 oder etwas ähnlichen initialisiert sofern es vernüfntige default Werte gibt.</p>
<p>Deshalb habe ich sowas ehrlich gesagt noch nie gebraucht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2094340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2094340</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 18 Jul 2011 15:25:10 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Mon, 18 Jul 2011 17:50:39 GMT]]></title><description><![CDATA[<p>na mir gehts dabei eher so um sachen wie structs<br />
weil 10 ints und floats und strings und so per init liste zu initialisieren ist eine ganz schöne schreibarbeit. und genau die will ich mir ersparen(ja ich weis ist and er falschen stelle gespart)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2094433</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2094433</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 18 Jul 2011 17:50:39 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Mon, 18 Jul 2011 18:04:45 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>na mir gehts dabei eher so um sachen wie structs<br />
weil 10 ints und floats und strings und so per init liste zu initialisieren ist eine ganz schöne schreibarbeit. und genau die will ich mir ersparen(ja ich weis ist and er falschen stelle gespart)...</p>
</blockquote>
<p>Im Prinzip macht das der Default-Konstruktor für dich. Außer bei PODs, da gibt es Sonderregeln. In Kurzform:</p>
<pre><code class="language-cpp">struct S  // POD
{
    int i;
    float f;
    bool b;
};

...

S s1;        // #1 -&gt; Werte der Member sind unbestimmt
S s2 = S();  // #2 -&gt; Werte der Member sind garantiert 0 bzw. false
</code></pre>
<p>Schon wenn du Strings drin hast, ist die Klasse aber kein POD mehr (PODs dürfen nur PODs enthalten), womit auch Variante 1 die Werte garantiert mit 0 initialisiert. Wenn du darauf Wert legst, kannst du den POD-Status auch auf andere Weise aufheben, z.B. (glaube ich) mit einem user-defined Konstruktor, der auch einfach leer sein kann.</p>
<p>Edit: nein, ich glaube mit C++0x wurde die POD-Definition derart erweitert, dass sie auch triviliale Konstruktoren einschließt. Da weiß ich dann die genauen Regeln nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2094445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2094445</guid><dc:creator><![CDATA[ipsec]]></dc:creator><pubDate>Mon, 18 Jul 2011 18:04:45 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Mon, 18 Jul 2011 18:13:05 GMT]]></title><description><![CDATA[<p>Wenn du mutig bist, kannst du in einer Klasse (ohne vtable) alle pods vor den nicht pods deklarieren und dann mit offsetof den Bereich für ein memset bestimmen.<br />
Das Ganze müsste natürlich gut dokumentiert sein.</p>
<p>Aber ich würds nicht machen, war auch nur eine Idee. Und ich glaube auch kaum, dass soetwas in der Praxis irgendow auch wirklich durchgeführt wird.</p>
<p>Und außerdem kann eine gute IDE mit guten Addons (bspw. MSVS + Visual Assist) bei solchen Fleißarbeiten ungemein hilfreich sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2094448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2094448</guid><dc:creator><![CDATA[yahendrik]]></dc:creator><pubDate>Mon, 18 Jul 2011 18:13:05 GMT</pubDate></item><item><title><![CDATA[Reply to feld-inhalt per memset initialisieren klappt nicht ... on Mon, 18 Jul 2011 19:17:47 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>na mir gehts dabei eher so um sachen wie structs<br />
weil 10 ints und floats und strings und so per init liste zu initialisieren ist eine ganz schöne schreibarbeit. und genau die will ich mir ersparen(ja ich weis ist and er falschen stelle gespart)...</p>
</blockquote>
<p>Wenn es eine POD struct ist, ist memset ja ok. Ansonsten: schreib ne Klasse ZeroFill oder aehnliches und mach die Struct dann so:</p>
<pre><code class="language-cpp">struct Foo {
   ZeroFill&lt;int&gt; a;
   ZeroFill&lt;char*&gt; b;
   ZeroFill&lt;double&gt; c;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2094508</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2094508</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Mon, 18 Jul 2011 19:17:47 GMT</pubDate></item></channel></rss>