<?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[std::map mit operator&amp;gt;&amp;gt; Überladung füllen]]></title><description><![CDATA[<p>Hi Leute,<br />
ich versuche grade /proc/meminfo zu parsen und in einer std::map zu speichern.</p>
<p>Das ganze klappt auch schon sehr gut allerdings bekomme ich immer Conditional jumps und uninitialised value of size 8 Fehler.(Ich denke die genauen Fehler muss ich nicht posten, wenn aber doch gewünscht mach ich das gerne) Debugging mache ich mit valgrind. Ich beschäftige mich seit gestern mit diesem Fehler und weiß nicht weiter. Aber zum Code:</p>
<pre><code>std::istream&amp; operator&gt;&gt;(std::istream&amp; in, std::map&lt;std::string, long&gt;&amp; my_map){
  std::string tmp;
  long tmp2;
  in &gt;&gt; tmp &gt;&gt; tmp2;
  tmp.back() = '\0'; //überschreiben der ':' 
  my_map[tmp] = tmp2;
  return in.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(),'\n'); //damit kB nicht mitgenommen wird und ignoriert wird
}

bool RamInfo::ParseMemInfo(){
  std::ifstream meminfo(&quot;/proc/meminfo&quot;);
  if (!meminfo.is_open()) {
    return false;
  }

  for(;meminfo &gt;&gt; FullMemInfo;); //geht das schöner? Da wusste ich es nicht besser. :/

  for (auto it = FullMemInfo.begin(); it != FullMemInfo.end(); ++it) {
    std::cerr &lt;&lt; it-&gt;first &lt;&lt; &quot; &quot; &lt;&lt; it-&gt;second &lt;&lt; '\n';
  }
  return true;
}
</code></pre>
<p>Und hier mein privater Member:</p>
<pre><code>private:
    std::map&lt;std::string, long&gt; FullMemInfo;
</code></pre>
<p>Input:</p>
<pre><code>MemTotal:        8169336 kB
MemFree:         2155128 kB
Buffers:          263032 kB
Cached:          2290392 kB
SwapCached:            0 kB
Active:          3759544 kB
Inactive:        1739936 kB
Active(anon):    2947964 kB
Inactive(anon):    41468 kB
Active(file):     811580 kB
Inactive(file):  1698468 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:              4360 kB
Writeback:             0 kB
AnonPages:       2946100 kB
Mapped:           486200 kB
Shmem:             43380 kB
Slab:             268620 kB
SReclaimable:     216832 kB
SUnreclaim:        51788 kB
KernelStack:        5736 kB
PageTables:        62964 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4084668 kB
Committed_AS:    7108248 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      324688 kB
VmallocChunk:   34359410300 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      233024 kB
DirectMap2M:     8146944 kB
</code></pre>
<p>Output(vor dem output kommen die Fehler d.h. es kommt vor der ausgaben Schleife die nur zum debuggen ist):</p>
<pre><code>Active 3789916
Active(anon) 2976424
Active(file) 813492
AnonHugePages 0
AnonPages 2974616
Bounce 0
Buffers 264300
Cached 2294664
CommitLimit 4084668
Committed_AS 7193772
DirectMap2M 8146944
DirectMap4k 233024
Dirty 536
HardwareCorrupted 0
HugePages_Free 0
HugePages_Rsvd 0
HugePages_Surp 0
HugePages_Total 0
Hugepagesize 2048
Inactive 1743636
Inactive(anon) 44560
Inactive(file) 1699076
KernelStack 5720
Mapped 490884
MemFree 2120860
MemTotal 8169336
Mlocked 0
NFS_Unstable 0
PageTables 63004
SReclaimable 217136
SUnreclaim 51036
Shmem 46472
Slab 268172
SwapCached 0
SwapFree 0
SwapTotal 0
Unevictable 0
VmallocChunk 34359410300
VmallocTotal 34359738367
VmallocUsed 324688
Writeback 0
WritebackTmp 0
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/326618/std-map-mit-operator-gt-gt-überladung-füllen</link><generator>RSS for Node</generator><lastBuildDate>Tue, 26 May 2026 14:30:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/326618.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Jun 2014 08:13:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::map mit operator&amp;gt;&amp;gt; Überladung füllen on Fri, 27 Jun 2014 08:13:57 GMT]]></title><description><![CDATA[<p>Hi Leute,<br />
ich versuche grade /proc/meminfo zu parsen und in einer std::map zu speichern.</p>
<p>Das ganze klappt auch schon sehr gut allerdings bekomme ich immer Conditional jumps und uninitialised value of size 8 Fehler.(Ich denke die genauen Fehler muss ich nicht posten, wenn aber doch gewünscht mach ich das gerne) Debugging mache ich mit valgrind. Ich beschäftige mich seit gestern mit diesem Fehler und weiß nicht weiter. Aber zum Code:</p>
<pre><code>std::istream&amp; operator&gt;&gt;(std::istream&amp; in, std::map&lt;std::string, long&gt;&amp; my_map){
  std::string tmp;
  long tmp2;
  in &gt;&gt; tmp &gt;&gt; tmp2;
  tmp.back() = '\0'; //überschreiben der ':' 
  my_map[tmp] = tmp2;
  return in.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(),'\n'); //damit kB nicht mitgenommen wird und ignoriert wird
}

bool RamInfo::ParseMemInfo(){
  std::ifstream meminfo(&quot;/proc/meminfo&quot;);
  if (!meminfo.is_open()) {
    return false;
  }

  for(;meminfo &gt;&gt; FullMemInfo;); //geht das schöner? Da wusste ich es nicht besser. :/

  for (auto it = FullMemInfo.begin(); it != FullMemInfo.end(); ++it) {
    std::cerr &lt;&lt; it-&gt;first &lt;&lt; &quot; &quot; &lt;&lt; it-&gt;second &lt;&lt; '\n';
  }
  return true;
}
</code></pre>
<p>Und hier mein privater Member:</p>
<pre><code>private:
    std::map&lt;std::string, long&gt; FullMemInfo;
</code></pre>
<p>Input:</p>
<pre><code>MemTotal:        8169336 kB
MemFree:         2155128 kB
Buffers:          263032 kB
Cached:          2290392 kB
SwapCached:            0 kB
Active:          3759544 kB
Inactive:        1739936 kB
Active(anon):    2947964 kB
Inactive(anon):    41468 kB
Active(file):     811580 kB
Inactive(file):  1698468 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:              4360 kB
Writeback:             0 kB
AnonPages:       2946100 kB
Mapped:           486200 kB
Shmem:             43380 kB
Slab:             268620 kB
SReclaimable:     216832 kB
SUnreclaim:        51788 kB
KernelStack:        5736 kB
PageTables:        62964 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4084668 kB
Committed_AS:    7108248 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      324688 kB
VmallocChunk:   34359410300 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      233024 kB
DirectMap2M:     8146944 kB
</code></pre>
<p>Output(vor dem output kommen die Fehler d.h. es kommt vor der ausgaben Schleife die nur zum debuggen ist):</p>
<pre><code>Active 3789916
Active(anon) 2976424
Active(file) 813492
AnonHugePages 0
AnonPages 2974616
Bounce 0
Buffers 264300
Cached 2294664
CommitLimit 4084668
Committed_AS 7193772
DirectMap2M 8146944
DirectMap4k 233024
Dirty 536
HardwareCorrupted 0
HugePages_Free 0
HugePages_Rsvd 0
HugePages_Surp 0
HugePages_Total 0
Hugepagesize 2048
Inactive 1743636
Inactive(anon) 44560
Inactive(file) 1699076
KernelStack 5720
Mapped 490884
MemFree 2120860
MemTotal 8169336
Mlocked 0
NFS_Unstable 0
PageTables 63004
SReclaimable 217136
SUnreclaim 51036
Shmem 46472
Slab 268172
SwapCached 0
SwapFree 0
SwapTotal 0
Unevictable 0
VmallocChunk 34359410300
VmallocTotal 34359738367
VmallocUsed 324688
Writeback 0
WritebackTmp 0
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2405857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405857</guid><dc:creator><![CDATA[Fuchs aus dem Wald]]></dc:creator><pubDate>Fri, 27 Jun 2014 08:13:57 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit operator&amp;gt;&amp;gt; Überladung füllen on Fri, 27 Jun 2014 08:22:44 GMT]]></title><description><![CDATA[<p>Da sind so spontan 2 Dinge, die mir auffallen.</p>
<p>Wenn &quot;in &gt;&gt; tmp&quot; fehl schlägt, dann ist tmp leer und &quot;tmp.back()&quot; liefert nichts sinnvolles.</p>
<p>Ausserdem ist der std::string kein null-Terminierter String. Er kann durchaus auch das Zeichen '\0' enthalten. Wenn Du das letzte Zeichen auf '\0' setzt, dann tust Du genau das. In C-Strings erwartet man, dass sich die länge des Strings um 1 verkürzt. Aber das ist nicht so bei std::string.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405858</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 27 Jun 2014 08:22:44 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit operator&amp;gt;&amp;gt; Überladung füllen on Fri, 27 Jun 2014 08:27:44 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Da sind so spontan 2 Dinge, die mir auffallen.</p>
<p>Wenn &quot;in &gt;&gt; tmp&quot; fehl schlägt, dann ist tmp leer und &quot;tmp.back()&quot; liefert nichts sinnvolles.</p>
<p>Ausserdem ist der std::string kein null-Terminierter String. Er kann durchaus auch das Zeichen '\0' enthalten. Wenn Du das letzte Zeichen auf '\0' setzt, dann tust Du genau das. In C-Strings erwartet man, dass sich die länge des Strings um 1 verkürzt. Aber das ist nicht so bei std::string.</p>
</blockquote>
<p>Danke für die Hinweise!<br />
So besser:</p>
<pre><code>if (tmp.length() != 0) {
    tmp.erase(tmp.length()-1);
  } else {
    return in;
  }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2405860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405860</guid><dc:creator><![CDATA[Fuchs aus dem Wald]]></dc:creator><pubDate>Fri, 27 Jun 2014 08:27:44 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit operator&amp;gt;&amp;gt; Überladung füllen on Fri, 27 Jun 2014 08:55:45 GMT]]></title><description><![CDATA[<p>Es klappt nach dem ich in der Zeile 16 folgendes geändert habe:</p>
<pre><code>for(;meminfo &gt;&gt; FullMemInfo;){}
</code></pre>
<p>Davor ist er immer zu weit gelaufen und damit in undefinierten bereich. Allerdings verstehe ich nicht ganz den Unterschied. Falls jemand ein paar Worte dazu sagen will immer gerne! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Ansonsten auch gerne Anregungen oder Verbesserungen erwünscht.<br />
Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405870</guid><dc:creator><![CDATA[Fuchs aus dem Wald]]></dc:creator><pubDate>Fri, 27 Jun 2014 08:55:45 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit operator&amp;gt;&amp;gt; Überladung füllen on Fri, 27 Jun 2014 09:02:49 GMT]]></title><description><![CDATA[<p>Fuchs aus dem Wald schrieb:</p>
<blockquote>
<p>So besser:</p>
<pre><code>if (tmp.length() != 0) {
    tmp.erase(tmp.length()-1);
  } else {
    return in;
  }
</code></pre>
</blockquote>
<p>Sieht auf dem ersten Blick merkwürdig aus. Im Kontext ist das zwar dann richtig aber ich würde es nicht so formulieren. Es ist nicht leicht ersichtlich, dass es nach dem erase dann wieder nach dem if weiter geht.</p>
<p>Besser wäre:</p>
<pre><code>if (tmp.empty())
  return in;

tmp.erase(tmp.length()-1);
</code></pre>
<p>Das sieht man eher, was hier passiert. Und in C++11 gibt es auch ein &quot;tmp.pop_back()&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405873</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 27 Jun 2014 09:02:49 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit operator&amp;gt;&amp;gt; Überladung füllen on Fri, 27 Jun 2014 09:07:18 GMT]]></title><description><![CDATA[<p>Fuchs aus dem Wald schrieb:</p>
<blockquote>
<p>Es klappt nach dem ich in der Zeile 16 folgendes geändert habe:</p>
<pre><code>for(;meminfo &gt;&gt; FullMemInfo;){}
</code></pre>
<p>Davor ist er immer zu weit gelaufen und damit in undefinierten bereich. Allerdings verstehe ich nicht ganz den Unterschied. Falls jemand ein paar Worte dazu sagen will immer gerne! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Ansonsten auch gerne Anregungen oder Verbesserungen erwünscht.<br />
Danke!</p>
</blockquote>
<p>Das kann nicht das Problem gewesen sein. Ein {} ist hier das gleiche wie ein Semikolon. Aber auch hier nochmal der Hinweis, dass man das lesbarer gestalten kann. Der leere Schleifenrumpf ist sehr versteckt. Ich würde ihm auf jeden Fall in eine eigene Zeile spendieren. Und while geht hier auch:</p>
<pre><code>while (meminfo &gt;&gt; FullMemInfo)
  ;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2405876</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405876</guid><dc:creator><![CDATA[tntnet]]></dc:creator><pubDate>Fri, 27 Jun 2014 09:07:18 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit operator&amp;gt;&amp;gt; Überladung füllen on Fri, 27 Jun 2014 09:35:17 GMT]]></title><description><![CDATA[<p>tntnet schrieb:</p>
<blockquote>
<p>Besser wäre:</p>
<pre><code>if (tmp.empty())
  return in;

tmp.erase(tmp.length()-1);
</code></pre>
<p>Das sieht man eher, was hier passiert. Und in C++11 gibt es auch ein &quot;tmp.pop_back()&quot;.</p>
</blockquote>
<p>Ich muss sagen du hast recht, danke dafür! Allerdings will das tmp.pop_back nicht obwohl:</p>
<pre><code>g++ -std=c++0x
</code></pre>
<p>Naja klappt ja auch mit tmp.erase(...).</p>
<p>tntnet schrieb:</p>
<blockquote>
<pre><code>while (meminfo &gt;&gt; FullMemInfo)
  ;
</code></pre>
</blockquote>
<p>Auch das sehe ich ein. <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="🙂"
    /> Deswegen hab ich ja noch mal gefragt ob es schöner geht.<br />
Würdest du das Semikolon wirklich in die nächste Zeile machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405882</guid><dc:creator><![CDATA[Fuchs aus dem Wald]]></dc:creator><pubDate>Fri, 27 Jun 2014 09:35:17 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit operator&amp;gt;&amp;gt; Überladung füllen on Fri, 27 Jun 2014 10:45:10 GMT]]></title><description><![CDATA[<blockquote>
<p>Auch das sehe ich ein. Deswegen hab ich ja noch mal gefragt ob es schöner geht.<br />
Würdest du das Semikolon wirklich in die nächste Zeile machen?</p>
</blockquote>
<p>Definitiv ja! Dann sieht man sofort, was mit der Schleife gemeint ist. Wenn es am Ende der Zeile steht könnte es ein Flüchtigkeitsfehler gewesen sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405905</guid><dc:creator><![CDATA[oenone]]></dc:creator><pubDate>Fri, 27 Jun 2014 10:45:10 GMT</pubDate></item><item><title><![CDATA[Reply to std::map mit operator&amp;gt;&amp;gt; Überladung füllen on Fri, 27 Jun 2014 10:48:51 GMT]]></title><description><![CDATA[<p>Ok vielen danke an alle!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2405907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2405907</guid><dc:creator><![CDATA[Fuchs aus dem Wald]]></dc:creator><pubDate>Fri, 27 Jun 2014 10:48:51 GMT</pubDate></item></channel></rss>