<?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[Heap-Probleme bei strcat]]></title><description><![CDATA[<p>Hallo liebe Community...</p>
<p>ich habe ein Fehler in einem meiner Programmabschnitte.</p>
<p>Ich versuche folgendes zu erreichen: Zur Laufzeit des Programms gibt eine Funktion einen char[4] zurück und eine andere Funktion ein char[x], wobei die Länge variiert. Diese chars sollen verketten werden und zusammen an eine Funktion übergeben werden...das hab ich bisher wie folgt gelöst:</p>
<pre><code class="language-cpp">char * buffer = new char[strlen(GetCards()) + 4 + 1];
strcat(buffer, GetCards());
strcat(buffer, &quot;XxXx&quot;);
</code></pre>
<blockquote>
<blockquote>
<p>Übergabe von buffer an Funktion</p>
</blockquote>
</blockquote>
<p>Nach einigen Aufrufen der Funktion erhalte ich jedoch ein HeapError und irgendwann den Fehler, dass zu wenig Speicher vorhanden ist. In dem obigen Beispiel ist die länge aber immer statis, d.h. 4 + 4 + 1.</p>
<p>Als Workaround habe ich mit Strings gearbeitet:</p>
<pre><code class="language-cpp">std::string buffer = &quot;&quot;;
buffer += GetCards();
buffer += &quot;XxXx&quot;;
</code></pre>
<blockquote>
<p>&gt; Übergabe von buffer.c_str() an Funktion.</p>
</blockquote>
<p>Der Workaround funktioniert, erklärt mir aber nicht wieso die in meinem Sinne sauberere Variante fehler bringt. Genügend Speicher allokiere ich doch vorher?</p>
<p>Könnt ihr mir helfen? Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305102/heap-probleme-bei-strcat</link><generator>RSS for Node</generator><lastBuildDate>Sat, 27 Jun 2026 09:17:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305102.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 21 Jun 2012 05:01:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Heap-Probleme bei strcat on Thu, 21 Jun 2012 05:01:48 GMT]]></title><description><![CDATA[<p>Hallo liebe Community...</p>
<p>ich habe ein Fehler in einem meiner Programmabschnitte.</p>
<p>Ich versuche folgendes zu erreichen: Zur Laufzeit des Programms gibt eine Funktion einen char[4] zurück und eine andere Funktion ein char[x], wobei die Länge variiert. Diese chars sollen verketten werden und zusammen an eine Funktion übergeben werden...das hab ich bisher wie folgt gelöst:</p>
<pre><code class="language-cpp">char * buffer = new char[strlen(GetCards()) + 4 + 1];
strcat(buffer, GetCards());
strcat(buffer, &quot;XxXx&quot;);
</code></pre>
<blockquote>
<blockquote>
<p>Übergabe von buffer an Funktion</p>
</blockquote>
</blockquote>
<p>Nach einigen Aufrufen der Funktion erhalte ich jedoch ein HeapError und irgendwann den Fehler, dass zu wenig Speicher vorhanden ist. In dem obigen Beispiel ist die länge aber immer statis, d.h. 4 + 4 + 1.</p>
<p>Als Workaround habe ich mit Strings gearbeitet:</p>
<pre><code class="language-cpp">std::string buffer = &quot;&quot;;
buffer += GetCards();
buffer += &quot;XxXx&quot;;
</code></pre>
<blockquote>
<p>&gt; Übergabe von buffer.c_str() an Funktion.</p>
</blockquote>
<p>Der Workaround funktioniert, erklärt mir aber nicht wieso die in meinem Sinne sauberere Variante fehler bringt. Genügend Speicher allokiere ich doch vorher?</p>
<p>Könnt ihr mir helfen? Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225610</guid><dc:creator><![CDATA[milchbart]]></dc:creator><pubDate>Thu, 21 Jun 2012 05:01:48 GMT</pubDate></item><item><title><![CDATA[Reply to Heap-Probleme bei strcat on Thu, 21 Jun 2012 05:41:52 GMT]]></title><description><![CDATA[<p>milchbart schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char * buffer = new char[strlen(GetCards()) + 4 + 1];
strcat(buffer, GetCards());
</code></pre>
</blockquote>
<p>Hier ist das Problem: strcat hängt an einen nullterminierten String an. Der Speicher, den dir new[] liefert, ist aber nicht initialisiert, also insbesondere auch nicht nullterminiert.</p>
<p>Und std::string sollte die Standardlösung sein, kein Workaround, wenn das Array-Gefrickel einmal nicht funktioniert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225613</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Thu, 21 Jun 2012 05:41:52 GMT</pubDate></item><item><title><![CDATA[Reply to Heap-Probleme bei strcat on Thu, 21 Jun 2012 06:15:32 GMT]]></title><description><![CDATA[<p>milchbart schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char * buffer = new char[strlen(GetCards()) + 4 + 1];
strcat(buffer, GetCards());
strcat(buffer, &quot;XxXx&quot;);
</code></pre>
</blockquote>
<p>Die übliche Verfahrensweise hierfür ist, zuerst 1x strcpy (statt strcat) zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225618</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Thu, 21 Jun 2012 06:15:32 GMT</pubDate></item><item><title><![CDATA[Reply to Heap-Probleme bei strcat on Thu, 21 Jun 2012 13:08:31 GMT]]></title><description><![CDATA[<blockquote>
<p>Der Workaround [über std::string] funktioniert, erklärt mir aber nicht wieso die in meinem Sinne sauberere Variante fehler bringt.</p>
</blockquote>
<p>Ich finde, du hast ein komisches Verständnis von Sauberkeit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225701</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Thu, 21 Jun 2012 13:08:31 GMT</pubDate></item><item><title><![CDATA[Reply to Heap-Probleme bei strcat on Thu, 21 Jun 2012 12:56:04 GMT]]></title><description><![CDATA[<p>EDIT: ach egal, <code>string</code> ist sowieso die einzige Wahl hier</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2225773</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2225773</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Thu, 21 Jun 2012 12:56:04 GMT</pubDate></item></channel></rss>