<?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[Speicherleck mit map variablen in abgeleiteter Klasse]]></title><description><![CDATA[<p>Hallo,</p>
<p>VS2005 zeigt mir das ich ein Speicherleck in einer abgeleiteten Klasse meiner Basisklasse habe. Durch testen und auskommentieren habe ich herausgefunden das ich nur Speicherlecks in abgeleiteten Klassen habe die einen zusätzliche map-Container haben. Diese Variable fülle ich im Konstruktor mit Werten.<br />
Hier der Code der beiden Klasse:</p>
<pre><code class="language-cpp">class CBaseTraceData
{
public:
   CBaseTraceData(SYSTEMTIME tTime, const T_BASE_TRACE_DATA *ptBaseTraceData, UCHAR *pRawData, UCHAR ucRawSize)
      : m_tTime(tTime), m_ptTraceData(ptBaseTraceData)
   {
      for (int i=0; i &lt; ucRawSize; i++)
      {
         m_vecData.push_back(pRawData[i]);
      }
   }

   // diverse Zugriffsfunktionen
   ...

   // diverse Ausgabefunktionen
   virtual void Print(bool WriteHeader = false);
   virtual void Print(CListCtrl &amp;ListCtr);
   virtual void Print(CStdioFile &amp;File, bool WriteHeader = false);

protected:
   // data
   SYSTEMTIME   m_tTime;
   const T_BASE_TRACE_DATA *m_ptTraceData;
   vector&lt;UCHAR&gt; m_vecData;
   map &lt; UCHAR, CString &gt; m_SubTrace;

   virtual CString strBuildTimeString(void);
   virtual CString strBuildTraceNameString(void)=0;
   ...
};

class CTraceDataStt : public CBaseTraceData
{
public:
   CTraceDataStt(SYSTEMTIME tTime, const T_BASE_TRACE_DATA *ptBaseTraceData, UCHAR *pRawData, UCHAR ucRawSize)
   : CBaseTraceData(tTime, ptBaseTraceData, pRawData, ucRawSize)
{
   for (UINT i=0; i &lt; STT_EVENT_CNT; i++)
   {  
      m_SubTrace[tSttEventsData[i].ucSubTrace] =  SttEventsData[i].strSubTraceName;
   }

   for (UINT i=0; i &lt; STT_STATE_CNT; i++)
   {  
      m_SubTraceStt[tSttStatesData[i].ucSubTrace] = tSttStatesData[i].strSubTraceName;
   }
}

protected:
   virtual CString strBuildTraceNameString(void);
   virtual CString strBuildAddData1String(void);
   virtual CString strBuildAddData2String(void);

private:
   map &lt; UCHAR, CString &gt; m_SubTraceStt;
};
</code></pre>
<p>Wie gesagt, wenn ich jetzt die abgeleitete Klasse CTraceDataStt mit new erzeuge, gleich mit delete wieder lösche und mein Programm beende zeigt mir VS2005 Speicherlecks.<br />
In abgeleiteten Klassen ohne den zusätzliche map-Container habe ich kein Problem. Das verwirrt mich auch noch.</p>
<p>Sieht jemand das Problem. Ich bin leider ratlos.<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Danke für jeden Tip!</p>
<p>Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/209062/speicherleck-mit-map-variablen-in-abgeleiteter-klasse</link><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 08:19:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/209062.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Mar 2008 11:23:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherleck mit map variablen in abgeleiteter Klasse on Wed, 26 Mar 2008 11:23:18 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>VS2005 zeigt mir das ich ein Speicherleck in einer abgeleiteten Klasse meiner Basisklasse habe. Durch testen und auskommentieren habe ich herausgefunden das ich nur Speicherlecks in abgeleiteten Klassen habe die einen zusätzliche map-Container haben. Diese Variable fülle ich im Konstruktor mit Werten.<br />
Hier der Code der beiden Klasse:</p>
<pre><code class="language-cpp">class CBaseTraceData
{
public:
   CBaseTraceData(SYSTEMTIME tTime, const T_BASE_TRACE_DATA *ptBaseTraceData, UCHAR *pRawData, UCHAR ucRawSize)
      : m_tTime(tTime), m_ptTraceData(ptBaseTraceData)
   {
      for (int i=0; i &lt; ucRawSize; i++)
      {
         m_vecData.push_back(pRawData[i]);
      }
   }

   // diverse Zugriffsfunktionen
   ...

   // diverse Ausgabefunktionen
   virtual void Print(bool WriteHeader = false);
   virtual void Print(CListCtrl &amp;ListCtr);
   virtual void Print(CStdioFile &amp;File, bool WriteHeader = false);

protected:
   // data
   SYSTEMTIME   m_tTime;
   const T_BASE_TRACE_DATA *m_ptTraceData;
   vector&lt;UCHAR&gt; m_vecData;
   map &lt; UCHAR, CString &gt; m_SubTrace;

   virtual CString strBuildTimeString(void);
   virtual CString strBuildTraceNameString(void)=0;
   ...
};

class CTraceDataStt : public CBaseTraceData
{
public:
   CTraceDataStt(SYSTEMTIME tTime, const T_BASE_TRACE_DATA *ptBaseTraceData, UCHAR *pRawData, UCHAR ucRawSize)
   : CBaseTraceData(tTime, ptBaseTraceData, pRawData, ucRawSize)
{
   for (UINT i=0; i &lt; STT_EVENT_CNT; i++)
   {  
      m_SubTrace[tSttEventsData[i].ucSubTrace] =  SttEventsData[i].strSubTraceName;
   }

   for (UINT i=0; i &lt; STT_STATE_CNT; i++)
   {  
      m_SubTraceStt[tSttStatesData[i].ucSubTrace] = tSttStatesData[i].strSubTraceName;
   }
}

protected:
   virtual CString strBuildTraceNameString(void);
   virtual CString strBuildAddData1String(void);
   virtual CString strBuildAddData2String(void);

private:
   map &lt; UCHAR, CString &gt; m_SubTraceStt;
};
</code></pre>
<p>Wie gesagt, wenn ich jetzt die abgeleitete Klasse CTraceDataStt mit new erzeuge, gleich mit delete wieder lösche und mein Programm beende zeigt mir VS2005 Speicherlecks.<br />
In abgeleiteten Klassen ohne den zusätzliche map-Container habe ich kein Problem. Das verwirrt mich auch noch.</p>
<p>Sieht jemand das Problem. Ich bin leider ratlos.<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Danke für jeden Tip!</p>
<p>Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480532</guid><dc:creator><![CDATA[Dragonheart]]></dc:creator><pubDate>Wed, 26 Mar 2008 11:23:18 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck mit map variablen in abgeleiteter Klasse on Wed, 26 Mar 2008 11:26:45 GMT]]></title><description><![CDATA[<p>mach den destructor der basis klasse entweder:<br />
- public und virtual<br />
oder (je nach gebrauch)<br />
- protected und non virtual</p>
<p>Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480534</guid><dc:creator><![CDATA[simon.gysi]]></dc:creator><pubDate>Wed, 26 Mar 2008 11:26:45 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherleck mit map variablen in abgeleiteter Klasse on Wed, 26 Mar 2008 11:58:40 GMT]]></title><description><![CDATA[<p>Danke für den Tip. Klapp hervorragend.<br />
Dabei hab ich das Buch &quot;Effektiv C++ programmieren&quot; hier.<br />
Na ja, wer lesen kann ist klar im Vorteil.</p>
<p>Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480552</guid><dc:creator><![CDATA[Dragonheart]]></dc:creator><pubDate>Wed, 26 Mar 2008 11:58:40 GMT</pubDate></item></channel></rss>