<?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[Dyn Speicherallokation mit String]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Klasse wie folgt definiert:</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;</p>
<p>class MString {<br />
public:<br />
MString::MString(unsigned = 0); //Konstruktor 1<br />
MString::MString(char* = NULL); //Konstruktor 2<br />
MString::MString(const MString&amp;); //Copy Konstruktor<br />
~MString(); //Destruktor</p>
<p>void conOut(void) const { cout&lt;&lt;&quot;Zeichenkette: &quot;&lt;&lt;cp&lt;&lt;&quot;\n&quot;; };<br />
unsigned length(void) const { return len; };<br />
unsigned capacity(void) const { return maxlen; };</p>
<p>private:<br />
unsigned len;<br />
unsigned maxlen;<br />
char* cp;<br />
};</p>
<p>Meine Funktionsdefinitionen sehen so aus:</p>
<p>#include &lt;iostream&gt;<br />
#include &quot;MSTRING.h&quot;<br />
#include &quot;handle.h&quot;<br />
#include &lt;String.h&gt;</p>
<p>using namespace std;</p>
<p>MString::MString(unsigned laenge) { //Konstruktor 1<br />
len = laenge;<br />
maxlen = len;<br />
cp = new char(len);<br />
}</p>
<p>MString::MString(char* p) { //Konstruktor 2</p>
<p>//Länge des C-Strings ermitteln<br />
len = strlen(p);</p>
<p>//Länge des Speichers<br />
maxlen = len;</p>
<p>//Speicher allokieren<br />
cp = new char(len);</p>
<p>//String kopieren<br />
cp = strncpy(cp,p,len);</p>
<p>}</p>
<p>MString::MString(const MString&amp; a) { //Copy Konstruktor</p>
<p>int i;</p>
<p>//Längen kopieren<br />
len = a.len;<br />
maxlen = a.maxlen;</p>
<p>//Neue Allokation für String<br />
cp = new char(len);</p>
<p>//String kopieren<br />
i = len;<br />
while(i &gt;= 0) {<br />
*(cp + i) = *(a.cp + i);<br />
i--;<br />
}<br />
}</p>
<p>MString::~MString() { //Destruktor</p>
<p>//Speicherplatz freigeben<br />
delete[] cp;<br />
}</p>
<p>Nun kriege ich folgenden Fehler:</p>
<p>DEBUG ERROR !<br />
DAMAGE:after Normal Block (#54) at .....</p>
<p>Bin ziemlich ratlos.</p>
<p>Grüsse<br />
Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/145605/dyn-speicherallokation-mit-string</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 07:14:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/145605.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 29 Apr 2006 14:45:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Dyn Speicherallokation mit String on Sat, 29 Apr 2006 14:45:48 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Klasse wie folgt definiert:</p>
<p>#include &lt;iostream&gt;<br />
using namespace std;</p>
<p>class MString {<br />
public:<br />
MString::MString(unsigned = 0); //Konstruktor 1<br />
MString::MString(char* = NULL); //Konstruktor 2<br />
MString::MString(const MString&amp;); //Copy Konstruktor<br />
~MString(); //Destruktor</p>
<p>void conOut(void) const { cout&lt;&lt;&quot;Zeichenkette: &quot;&lt;&lt;cp&lt;&lt;&quot;\n&quot;; };<br />
unsigned length(void) const { return len; };<br />
unsigned capacity(void) const { return maxlen; };</p>
<p>private:<br />
unsigned len;<br />
unsigned maxlen;<br />
char* cp;<br />
};</p>
<p>Meine Funktionsdefinitionen sehen so aus:</p>
<p>#include &lt;iostream&gt;<br />
#include &quot;MSTRING.h&quot;<br />
#include &quot;handle.h&quot;<br />
#include &lt;String.h&gt;</p>
<p>using namespace std;</p>
<p>MString::MString(unsigned laenge) { //Konstruktor 1<br />
len = laenge;<br />
maxlen = len;<br />
cp = new char(len);<br />
}</p>
<p>MString::MString(char* p) { //Konstruktor 2</p>
<p>//Länge des C-Strings ermitteln<br />
len = strlen(p);</p>
<p>//Länge des Speichers<br />
maxlen = len;</p>
<p>//Speicher allokieren<br />
cp = new char(len);</p>
<p>//String kopieren<br />
cp = strncpy(cp,p,len);</p>
<p>}</p>
<p>MString::MString(const MString&amp; a) { //Copy Konstruktor</p>
<p>int i;</p>
<p>//Längen kopieren<br />
len = a.len;<br />
maxlen = a.maxlen;</p>
<p>//Neue Allokation für String<br />
cp = new char(len);</p>
<p>//String kopieren<br />
i = len;<br />
while(i &gt;= 0) {<br />
*(cp + i) = *(a.cp + i);<br />
i--;<br />
}<br />
}</p>
<p>MString::~MString() { //Destruktor</p>
<p>//Speicherplatz freigeben<br />
delete[] cp;<br />
}</p>
<p>Nun kriege ich folgenden Fehler:</p>
<p>DEBUG ERROR !<br />
DAMAGE:after Normal Block (#54) at .....</p>
<p>Bin ziemlich ratlos.</p>
<p>Grüsse<br />
Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047797</guid><dc:creator><![CDATA[Matthias81927]]></dc:creator><pubDate>Sat, 29 Apr 2006 14:45:48 GMT</pubDate></item><item><title><![CDATA[Reply to Dyn Speicherallokation mit String on Sat, 29 Apr 2006 15:03:15 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ist vielleicht ein blöder Tipp, aber benutz einfach std::string.</p>
<p>chrische</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047809</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 29 Apr 2006 15:03:15 GMT</pubDate></item><item><title><![CDATA[Reply to Dyn Speicherallokation mit String on Sat, 29 Apr 2006 15:07:49 GMT]]></title><description><![CDATA[<p>Sorry aber das kenn ich nicht, muss etwas mit dem Copy Konstruktor zu tun haben</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047813</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047813</guid><dc:creator><![CDATA[mat81927]]></dc:creator><pubDate>Sat, 29 Apr 2006 15:07:49 GMT</pubDate></item><item><title><![CDATA[Reply to Dyn Speicherallokation mit String on Sat, 29 Apr 2006 15:19:29 GMT]]></title><description><![CDATA[<p>benutze cp = new char[len]</p>
<p>also mit ECKIGEN Klammern und nicht mit runden.<br />
keine Ahnung wieso es abschmiert, und wieso der Compiler das auch annimmt.<br />
Ich kenne es nur mit eckigen, und das funktioniert.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047829</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047829</guid><dc:creator><![CDATA[hotblack]]></dc:creator><pubDate>Sat, 29 Apr 2006 15:19:29 GMT</pubDate></item><item><title><![CDATA[Reply to Dyn Speicherallokation mit String on Sat, 29 Apr 2006 15:21:43 GMT]]></title><description><![CDATA[<p>std::string ist die string klasse der C++ std-lib.<br />
genau genommen ist std::string ein typedef für std::basic_string&lt;char&gt;.<br />
wenn du strings haben willst dann nimm std::string da dann jeder ohne proleme dene source erwenden könnte, was wichitg ist wenn du im team arbeitest oder deine source verüffentlichst.<br />
Es ist ein tipp vieler erfahrenne C++progger<br />
(zu denen ich NICHT gehöre)<br />
&quot;schreibe NIE etwas neu, was es schon in der C++ STD-lib gibt.&quot;</p>
<p>Mfg Shade37337</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047832</guid><dc:creator><![CDATA[branleb]]></dc:creator><pubDate>Sat, 29 Apr 2006 15:21:43 GMT</pubDate></item><item><title><![CDATA[Reply to Dyn Speicherallokation mit String on Sat, 29 Apr 2006 15:29:17 GMT]]></title><description><![CDATA[<p>Die String Klasse der STL ist IMHO aber nciht sooo dolle.<br />
Und außerdem ist sie auch ein gutes Übungsbeispiel, da kann man ne Menge mit<br />
dynamische Speicherverwaltung lernen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047839</guid><dc:creator><![CDATA[hotblack]]></dc:creator><pubDate>Sat, 29 Apr 2006 15:29:17 GMT</pubDate></item><item><title><![CDATA[Reply to Dyn Speicherallokation mit String on Sat, 29 Apr 2006 15:36:13 GMT]]></title><description><![CDATA[<p>Ok mit den eckigen Klammern geht es, aber er allokiert mehr als ich will ich geb ihm jetzt</p>
<p>MString::MString(char* p) { //Konstruktor 2</p>
<p>//Länge des C-Strings ermitteln<br />
len = strlen(p);</p>
<p>//Länge des Speichers<br />
maxlen = len;</p>
<p>//Speicher allokieren<br />
cp = new char[len];</p>
<p>//String kopieren<br />
strncpy(cp,p,len);</p>
<p>}</p>
<p>Die genaue Länge vor und er macht so ca 6 Plätze mehr als len vorgibt ?</p>
<p>Grübel Grübel HÄÄÄÄ</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047846</guid><dc:creator><![CDATA[Matthias81927]]></dc:creator><pubDate>Sat, 29 Apr 2006 15:36:13 GMT</pubDate></item><item><title><![CDATA[Reply to Dyn Speicherallokation mit String on Sat, 29 Apr 2006 15:45:41 GMT]]></title><description><![CDATA[<p>Ich nehme mal an, du ahst es beim debuggen im Speicherabbild gesehen das er mehr Speicher reserviert.<br />
Das habe ich auch schon bemerkt, aber ich vermute dsa da noch ein paar verwaltungsinformationen reingeschrieben werden. Wenn du nämlich jetzt über dein Array hinausschreibst, stürzt es beim delete[] ab. Deswegen denke ich sind das Verwaltungsinfos.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047854</guid><dc:creator><![CDATA[hotblack]]></dc:creator><pubDate>Sat, 29 Apr 2006 15:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to Dyn Speicherallokation mit String on Sat, 29 Apr 2006 15:51:13 GMT]]></title><description><![CDATA[<p>im übrigen ist mir gerade noch aufegefallen, das du deine Strings ohne Nullterminierung kopierst wenn das so gewollt ist dann okay. Aber deine conOut Funktion wird so nicht funktionieren, wenn ich das jetzt richitg überblickt habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047861</guid><dc:creator><![CDATA[hotblack]]></dc:creator><pubDate>Sat, 29 Apr 2006 15:51:13 GMT</pubDate></item><item><title><![CDATA[Reply to Dyn Speicherallokation mit String on Sat, 29 Apr 2006 15:59:13 GMT]]></title><description><![CDATA[<p>Doch sie funkt, das ist die Aufgabe dieses Praktikums, keine C-Strings mit /0 sondern allokieren und kopieren jedoch nicht abschliessen. Die conOut funkt, jedoch mit einigen nachfolgenden Zeichen, das soll aber angeblich so sein, dämliche Aufgabe der Uni.</p>
<p>Ich glaub das passt jetzt so, vielen Dank für deine Hilfe, die Lösung waren die eckigen Klammern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047865</guid><dc:creator><![CDATA[Matthias81927]]></dc:creator><pubDate>Sat, 29 Apr 2006 15:59:13 GMT</pubDate></item><item><title><![CDATA[Reply to Dyn Speicherallokation mit String on Sat, 29 Apr 2006 16:18:21 GMT]]></title><description><![CDATA[<p>jo genau das meinte ich mit nicht funktionieren, cout gibt halt solange aus bis eine 0 im Speicher steht. Aber wenn das die aufgabe ist, dann passt das schon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1047885</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1047885</guid><dc:creator><![CDATA[hotblack]]></dc:creator><pubDate>Sat, 29 Apr 2006 16:18:21 GMT</pubDate></item></channel></rss>