<?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[Probleme bei Speicherfreigabe]]></title><description><![CDATA[<p>Servus allesammt,</p>
<p>ich hab ein kleines Problem.<br />
Ich muss im Rahmen eines Teamprojects betreiben.<br />
Momentan bin ich dabei die Memoryleaks im Programmcode zu beseitigen.<br />
Zu sagen ist das ich einfach nur den Code bekommen habe, programmiert habe ich davon nix.<br />
Jetzt bekomme ich aber einfach einige Memoryleaks nicht beseitigt, weil ich nicht weiß wie ich den mit malloc reservierten Speicher wieder freigeben kann. Besser gesagt &quot;wo und wie&quot; ich wieder freigeben kann.</p>
<p>Der Memoryleak verweißt mich auf folgende Allokierung in einer .cpp.</p>
<pre><code>void c_emxInit_real_T(emxArray_real_T **pEmxArray, int32_T b_numDimensions)
{
  emxArray_real_T *emxArray;
  int32_T loop_ub;
  int32_T i;
  *pEmxArray = (emxArray_real_T *)malloc(sizeof(emxArray_real_T));
  emxArray = *pEmxArray;
  emxArray-&gt;data = (real_T *)NULL;
  emxArray-&gt;numDimensions = b_numDimensions;

  //verursacht Memory leak

emxArray-&gt;size = (int32_T *)malloc((uint32_T)(sizeof(int32_T) * b_numDimensions));

  emxArray-&gt;allocatedSize = 0;
  emxArray-&gt;canFreeData = TRUE;
  loop_ub = b_numDimensions - 1;
  for (i = 0; i &lt;= loop_ub; i++) {
    emxArray-&gt;size[i] = 0;
  }

}
</code></pre>
<p>Aufgerufen wird die oben stehende Funktion in einer anderen .cpp hier..</p>
<pre><code>emxArray_real_T *emxCreateND_real_T(int32_T b_numDimensions, int32_T *b_size)
{
  emxArray_real_T *emx;
  int32_T numEl;
  int32_T loop_ub;
  int32_T i;
c_emxInit_real_T(&amp;emx, b_numDimensions);
  numEl = 1;
  loop_ub = b_numDimensions - 1;
  for (i = 0; i &lt;= loop_ub; i++) {
    numEl *= b_size[i];
    emx-&gt;size[i] = b_size[i];
  }

  emx-&gt;data = (real_T *)calloc((uint32_T)numEl, sizeof(real_T));
  emx-&gt;numDimensions = b_numDimensions;
  emx-&gt;allocatedSize = numEl;
  return emx;
}
}
</code></pre>
<p>mit dieser Funktion wird in der Klassen-cpp folgende Variable deklariert.</p>
<pre><code>syncSequenceT2 = emxCreateND_real_T(1, size);
</code></pre>
<p>Mir ist klar, dass das mir da jetzt eher schwer zu helfen ist. Vor allem ohne den kompletten Code.<br />
Aber es wäre schon sehr hilfreich allein zu wissen wie genau den der oben makierte malloc befehl genau aufgegaut ist. Ich hab einfach keinen Überblick bei all den pointern und pfeiloperatoren.</p>
<p>Also wo in den drei Files muss ich wieder freigeben und was erwartet free dabei von mir.<br />
Vielen dank schonmal</p>
<p>Gruß Schorsch</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/317907/probleme-bei-speicherfreigabe</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 22:33:18 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317907.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Jun 2013 13:06:14 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme bei Speicherfreigabe on Mon, 24 Jun 2013 13:06:14 GMT]]></title><description><![CDATA[<p>Servus allesammt,</p>
<p>ich hab ein kleines Problem.<br />
Ich muss im Rahmen eines Teamprojects betreiben.<br />
Momentan bin ich dabei die Memoryleaks im Programmcode zu beseitigen.<br />
Zu sagen ist das ich einfach nur den Code bekommen habe, programmiert habe ich davon nix.<br />
Jetzt bekomme ich aber einfach einige Memoryleaks nicht beseitigt, weil ich nicht weiß wie ich den mit malloc reservierten Speicher wieder freigeben kann. Besser gesagt &quot;wo und wie&quot; ich wieder freigeben kann.</p>
<p>Der Memoryleak verweißt mich auf folgende Allokierung in einer .cpp.</p>
<pre><code>void c_emxInit_real_T(emxArray_real_T **pEmxArray, int32_T b_numDimensions)
{
  emxArray_real_T *emxArray;
  int32_T loop_ub;
  int32_T i;
  *pEmxArray = (emxArray_real_T *)malloc(sizeof(emxArray_real_T));
  emxArray = *pEmxArray;
  emxArray-&gt;data = (real_T *)NULL;
  emxArray-&gt;numDimensions = b_numDimensions;

  //verursacht Memory leak

emxArray-&gt;size = (int32_T *)malloc((uint32_T)(sizeof(int32_T) * b_numDimensions));

  emxArray-&gt;allocatedSize = 0;
  emxArray-&gt;canFreeData = TRUE;
  loop_ub = b_numDimensions - 1;
  for (i = 0; i &lt;= loop_ub; i++) {
    emxArray-&gt;size[i] = 0;
  }

}
</code></pre>
<p>Aufgerufen wird die oben stehende Funktion in einer anderen .cpp hier..</p>
<pre><code>emxArray_real_T *emxCreateND_real_T(int32_T b_numDimensions, int32_T *b_size)
{
  emxArray_real_T *emx;
  int32_T numEl;
  int32_T loop_ub;
  int32_T i;
c_emxInit_real_T(&amp;emx, b_numDimensions);
  numEl = 1;
  loop_ub = b_numDimensions - 1;
  for (i = 0; i &lt;= loop_ub; i++) {
    numEl *= b_size[i];
    emx-&gt;size[i] = b_size[i];
  }

  emx-&gt;data = (real_T *)calloc((uint32_T)numEl, sizeof(real_T));
  emx-&gt;numDimensions = b_numDimensions;
  emx-&gt;allocatedSize = numEl;
  return emx;
}
}
</code></pre>
<p>mit dieser Funktion wird in der Klassen-cpp folgende Variable deklariert.</p>
<pre><code>syncSequenceT2 = emxCreateND_real_T(1, size);
</code></pre>
<p>Mir ist klar, dass das mir da jetzt eher schwer zu helfen ist. Vor allem ohne den kompletten Code.<br />
Aber es wäre schon sehr hilfreich allein zu wissen wie genau den der oben makierte malloc befehl genau aufgegaut ist. Ich hab einfach keinen Überblick bei all den pointern und pfeiloperatoren.</p>
<p>Also wo in den drei Files muss ich wieder freigeben und was erwartet free dabei von mir.<br />
Vielen dank schonmal</p>
<p>Gruß Schorsch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333869</guid><dc:creator><![CDATA[Schorsch]]></dc:creator><pubDate>Mon, 24 Jun 2013 13:06:14 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Speicherfreigabe on Mon, 24 Jun 2013 13:46:10 GMT]]></title><description><![CDATA[<p>Ist der Quelltext in C oder in C++ <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="😕"
    /></p>
<p>Denn malloc/free ist die Variante aus C.</p>
<p>In C++ sollte man, wenn man da keine andere bessere Lösung findet, new/delete bevorzugen.</p>
<p>So weit ein wenig Theorie.</p>
<p>Das in der Praxis in einem grossen Projekt zu bearbeiten, kann da umfangreicher werden. <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="😃"
    /></p>
<p>Hab das nicht gründlich gelesen. Hier sollten auch noch ein paar Infos drin stehen:<br />
<a href="http://www.codeproject.com/Articles/10141/RAII-Dynamic-Objects-and-Factories-in-C" rel="nofollow">http://www.codeproject.com/Articles/10141/RAII-Dynamic-Objects-and-Factories-in-C</a> ++ <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/2333903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333903</guid><dc:creator><![CDATA[f.-th.]]></dc:creator><pubDate>Mon, 24 Jun 2013 13:46:10 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Speicherfreigabe on Mon, 24 Jun 2013 14:28:17 GMT]]></title><description><![CDATA[<p>Schorsch schrieb:</p>
<blockquote>
<p>Also wo in den drei Files muss ich wieder freigeben</p>
</blockquote>
<p>Da, wo du das Zeug nicht mehr benötigst. Wenn syncSequenceT2 ein Klassenmember ist, vermutlich im Destruktor der Klasse.</p>
<p>Schorsch schrieb:</p>
<blockquote>
<p>und was erwartet free dabei von mir.</p>
</blockquote>
<p>Die Zeiger, die von malloc und calloc geliefert wurden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333915</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333915</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 24 Jun 2013 14:28:17 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme bei Speicherfreigabe on Mon, 24 Jun 2013 15:43:29 GMT]]></title><description><![CDATA[<p>Schorsch, mein Beileid. Du hast eine Scheiss-Aufgabe bekommen. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Deine Funktion c_emxInit_real_T() allokiert Speicher, und du darfst nun darüber räseln, wer eigentlich dafür verantwortlich ist diesen wieder freizugeben.</p>
<p>Du könnest probeweise mal hingehen und emxArray_real_T als Klasse implementieren, alle Zugriffe knallhart mittels Get() und Set() kapseln, jewede Allokation/Freigabe auf emxArray_real_T mittels new/delete machen und die interne Allokation von Membern im Konstruktor/Destrukor erledigen.</p>
<p>Aber das sieht nach einer dicken fetten Arbeitsbeschaffungsmaßnahme aus. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2333947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2333947</guid><dc:creator><![CDATA[Bitte ein Bit]]></dc:creator><pubDate>Mon, 24 Jun 2013 15:43:29 GMT</pubDate></item></channel></rss>