<?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[dynamische speicher vergebung ?!]]></title><description><![CDATA[<p>hallo!</p>
<p>ich habe folgende funktion sock_convert_em geschrieben (main ist nur zu testzwecken):</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;iostream.h&gt;
#include &lt;string&gt;
#include &lt;conio.h&gt;

int sock_convert_em (char *dertext,char *text,char *ubers,int &amp;typ) 
{

	if ( !strcmp( dertext , &quot;;~|&quot; ) )
		return 2;

	register int i,x,j;

	char leer = ' ';
	char quers = '|';
	char welle = '~';
	char *temp;

	for (i=0; dertext[i]; i++) {
		if (dertext[i] == welle)
			dertext[i] = leer;
	}

	j = 0;

	for (x=1; x&lt;=3; x++) {

		temp = new char[256];

		for (i = 0; dertext[j] != quers; i++) {
			temp[i] = dertext[j];
			j++;
		}
		j++;

		cout &lt;&lt; strlen(temp) &lt;&lt;endl;

		if(x==1)
			strcpy(text,temp);
		if(x==2)
			strcpy(ubers,temp);
		if(x==3)
			typ = atoi(temp);

		delete [] temp;

	}

	return 0;

}

int main() {

	char *meldung;
	meldung = new char[71];
	strcpy(meldung, &quot;hallo,~das~ist~der~text!|test|4635233445645634435334234234255234353252|&quot;);

	char *text;
	char *ubers;

	text = new char[256];
	ubers = new char[256];

	int nummer = 0;

	sock_convert_em(meldung,text,ubers,nummer);

	cout &lt;&lt; &quot;Ueberschrift: &quot; &lt;&lt; ubers &lt;&lt; endl;
	cout &lt;&lt; &quot;Text: &quot; &lt;&lt; text &lt;&lt; endl;
	cout &lt;&lt; &quot;Typ: &quot; &lt;&lt; nummer &lt;&lt; endl;

//	delete [] meldung;
//	delete [] text;
//	delete [] ubers;

	getch();

	return 0;
}
</code></pre>
<p>sie soll einen string meldung an den |s in drei teile trennen, alle ~s in leerzeichen verwandeln (was auch schon funktioniert) und schießlich den letzen der drei teile in einen int umwandeln.</p>
<p>dabei hab ich aber einige probleme:</p>
<ol>
<li>
<p>ich habe die drei delete anweisungen zum schluss die ja eigentlich da sein mussen inzwischen als kommentar dargestellt da das programm ansonsten nicht funktioniert.</p>
</li>
<li>
<p>ich muss vorher natürlich angeben wie groß die arrays text ubers und temp sein müssen. wenn die zeichenlänge die ja nicht festgelegt ist dann aber nicht zufällig mit der von mir angegebenen übereinstimmt ist am ende des strings ein leerraum was bei text und ubers schlecht ist und bei typ zu einem fehler führt da dann atoi nicht richtig convertiert.</p>
</li>
</ol>
<p>warum funktionieren die delete anweisungen nicht? wie kann ich die funktion verbessern? kann ich den dynamsischen kram vll weglasen?</p>
<p>bitte um hilfe!</p>
<p>mfg<br />
mr.x</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157816/dynamische-speicher-vergebung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 10:00:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157816.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 29 Aug 2006 18:30:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dynamische speicher vergebung ?! on Tue, 29 Aug 2006 18:30:47 GMT]]></title><description><![CDATA[<p>hallo!</p>
<p>ich habe folgende funktion sock_convert_em geschrieben (main ist nur zu testzwecken):</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;iostream.h&gt;
#include &lt;string&gt;
#include &lt;conio.h&gt;

int sock_convert_em (char *dertext,char *text,char *ubers,int &amp;typ) 
{

	if ( !strcmp( dertext , &quot;;~|&quot; ) )
		return 2;

	register int i,x,j;

	char leer = ' ';
	char quers = '|';
	char welle = '~';
	char *temp;

	for (i=0; dertext[i]; i++) {
		if (dertext[i] == welle)
			dertext[i] = leer;
	}

	j = 0;

	for (x=1; x&lt;=3; x++) {

		temp = new char[256];

		for (i = 0; dertext[j] != quers; i++) {
			temp[i] = dertext[j];
			j++;
		}
		j++;

		cout &lt;&lt; strlen(temp) &lt;&lt;endl;

		if(x==1)
			strcpy(text,temp);
		if(x==2)
			strcpy(ubers,temp);
		if(x==3)
			typ = atoi(temp);

		delete [] temp;

	}

	return 0;

}

int main() {

	char *meldung;
	meldung = new char[71];
	strcpy(meldung, &quot;hallo,~das~ist~der~text!|test|4635233445645634435334234234255234353252|&quot;);

	char *text;
	char *ubers;

	text = new char[256];
	ubers = new char[256];

	int nummer = 0;

	sock_convert_em(meldung,text,ubers,nummer);

	cout &lt;&lt; &quot;Ueberschrift: &quot; &lt;&lt; ubers &lt;&lt; endl;
	cout &lt;&lt; &quot;Text: &quot; &lt;&lt; text &lt;&lt; endl;
	cout &lt;&lt; &quot;Typ: &quot; &lt;&lt; nummer &lt;&lt; endl;

//	delete [] meldung;
//	delete [] text;
//	delete [] ubers;

	getch();

	return 0;
}
</code></pre>
<p>sie soll einen string meldung an den |s in drei teile trennen, alle ~s in leerzeichen verwandeln (was auch schon funktioniert) und schießlich den letzen der drei teile in einen int umwandeln.</p>
<p>dabei hab ich aber einige probleme:</p>
<ol>
<li>
<p>ich habe die drei delete anweisungen zum schluss die ja eigentlich da sein mussen inzwischen als kommentar dargestellt da das programm ansonsten nicht funktioniert.</p>
</li>
<li>
<p>ich muss vorher natürlich angeben wie groß die arrays text ubers und temp sein müssen. wenn die zeichenlänge die ja nicht festgelegt ist dann aber nicht zufällig mit der von mir angegebenen übereinstimmt ist am ende des strings ein leerraum was bei text und ubers schlecht ist und bei typ zu einem fehler führt da dann atoi nicht richtig convertiert.</p>
</li>
</ol>
<p>warum funktionieren die delete anweisungen nicht? wie kann ich die funktion verbessern? kann ich den dynamsischen kram vll weglasen?</p>
<p>bitte um hilfe!</p>
<p>mfg<br />
mr.x</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127111</guid><dc:creator><![CDATA[Mr. XXX]]></dc:creator><pubDate>Tue, 29 Aug 2006 18:30:47 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische speicher vergebung ?! on Tue, 29 Aug 2006 20:04:01 GMT]]></title><description><![CDATA[<pre><code>int main(int argc, char* argv[])
{
	char s[100] = &quot;hallo,~das~ist~der~text!|test|1234|&quot;;
    char text1[100], text2[100];
	int zahl;

	char* pRead = s;
    char* pBegin[3];
	pBegin[0] = pRead;
	int i = 1;
	while (i &lt; 3 &amp;&amp; ++pRead)
	{
		if (*pRead == '~') *pRead = ' ';
		if (*pRead == '|') { *pRead = '\0'; pBegin[i++] = pRead + 1; }
	}

	strcpy(text1, pBegin[0]);
	strcpy(text2, pBegin[1]);
	zahl = atoi(pBegin[2]);

	cout &lt;&lt; text1 &lt;&lt; &quot;, &quot; &lt;&lt; text2 &lt;&lt;  &quot;, &quot; &lt;&lt; zahl &lt;&lt; endl;

	return 0;
}
</code></pre>
<p>Denk mal ein bisschen über Pointerarithmetik nach, C-Strings sind nullterminiert und ein Programm ist nicht C++, weil es cout, new, delete verwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127193</guid><dc:creator><![CDATA[turing_unreg]]></dc:creator><pubDate>Tue, 29 Aug 2006 20:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to dynamische speicher vergebung ?! on Wed, 30 Aug 2006 08:09:19 GMT]]></title><description><![CDATA[<p>1: Mit was für einer Fehlermeldung verabschieden sich denn deine delete-Anweisungen? Vielleicht hilft es ja, sich das ganze Programm im Debugger anzusehen.</p>
<p>2: Wir sind hier bei C++, da solltest du statt der char*s lieber std::string verwenden (den richtigen Header dafür hast du ja schon eingebunden).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1127378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1127378</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 30 Aug 2006 08:09:19 GMT</pubDate></item></channel></rss>