<?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[malloc in c++?]]></title><description><![CDATA[<p>Tach.</p>
<p>Ich habe hier ein altes C Programm und möchte es unter C++ etwas aufmöbeln.<br />
Ich lese eine Datei in eine Variable:</p>
<pre><code>unsigned char *variable = (unsigned char*) malloc(filesize+1);
read(handle,&amp;variable[0],filesize);
</code></pre>
<p>Programm bedingt, da der Inhalt Zahlenkolonen sind und immer exakt an der selben Stelle stehen, nutze ich dann:</p>
<pre><code>int zahl = 0;
memcpy(&amp;zahl,&amp;vaiable[126],2); // 2Byte Integer

free (variable);
</code></pre>
<p>Mich würde nun interessieren was ein C++ Mensch daraus machen würde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/139402/malloc-in-c</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 17:26:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/139402.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Mar 2006 13:36:44 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to malloc in c++? on Mon, 06 Mar 2006 13:36:44 GMT]]></title><description><![CDATA[<p>Tach.</p>
<p>Ich habe hier ein altes C Programm und möchte es unter C++ etwas aufmöbeln.<br />
Ich lese eine Datei in eine Variable:</p>
<pre><code>unsigned char *variable = (unsigned char*) malloc(filesize+1);
read(handle,&amp;variable[0],filesize);
</code></pre>
<p>Programm bedingt, da der Inhalt Zahlenkolonen sind und immer exakt an der selben Stelle stehen, nutze ich dann:</p>
<pre><code>int zahl = 0;
memcpy(&amp;zahl,&amp;vaiable[126],2); // 2Byte Integer

free (variable);
</code></pre>
<p>Mich würde nun interessieren was ein C++ Mensch daraus machen würde <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1009714</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009714</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Mon, 06 Mar 2006 13:36:44 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Mon, 06 Mar 2006 13:41:44 GMT]]></title><description><![CDATA[<p>Vermutlich sowas in der Art:</p>
<pre><code class="language-cpp">char *variable = new char[filesize+1]; // unsigned unnötig da eh nur puffer
handle.read(variable, filesize); // c++-stream vorausgesetzt 

short zahl = *( reinterpret_cast&lt;short*&gt;(variable + 126) );

delete[] variable;
</code></pre>
<p>Der Cast ist Implementationsabhängig (short muss nicht immer 2 Byte haben).</p>
<p>Ungetestet, undurchdacht, demnach keine Garantie <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1009716</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009716</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 06 Mar 2006 13:41:44 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Mon, 06 Mar 2006 13:46:31 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>aus malloc macht er new, aus free ein delete. Aber eigentlich nimmt er dafür ifstreams:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

using namespace std;

int main() {
  ifstream ifs(&quot;datei.txt&quot;);

  if (!ifs)
    return 1;

  vector&lt;string&gt; v; 
  string s(&quot;&quot;);

  while (ifs.good()) {  
    getline(ifs, s);  //zeilenweise einlesen
    vec.push_back(s); //und in vektor ablegen
  }
  ifs.close();
  return 0;
}
</code></pre>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1009718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009718</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Mon, 06 Mar 2006 13:46:31 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Mon, 06 Mar 2006 14:05:38 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<pre><code class="language-cpp">short zahl = *( reinterpret_cast&lt;short*&gt;(variable + 126) );
</code></pre>
<p>Der Cast ist Implementationsabhängig (short muss nicht immer 2 Byte haben).</p>
</blockquote>
<p>Der Dateisyntax kommt noch aus DOS Zeiten. Ein sehr altes Programm das ich jetzt auf Windows konvertieren möchte.</p>
<p>Die oben aufgezeigte Variante wäre darum nicht möglich, da das <strong>int</strong> zum Beispiel als auch 1Byte abgelegt sein kann. Die Dateistruktur ist auf &quot;klein&quot; ausgelegt und auf Speicher schondend. Obriges Beispiel würde also schon Bytes lesen die garnicht für den Wert bestimmt sind. Man muss schon exakt sagen können von welcher Stelle man wieviel Bytes lesen möchte.</p>
<p>Auch find ich die new/delete Methode nicht wirklich optimal. Normal möchte man doch das die Speicherverwaltung eventuelle Leaks selber killt.<br />
Hier muss man wirklich drauf achten das das delete auch gemacht wird.</p>
<p>GPC schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>aus malloc macht er new, aus free ein delete. Aber eigentlich nimmt er dafür ifstreams:</p>
</blockquote>
<p>Hier wäre die Speicherverwaltung dank vector schon auf der &quot;sicheren&quot; Seite. Wie kann ich dort aber einem Zahlenwert wie oben übergeben?<br />
Beispielsweise von Stelle 455 sind 3 Bytes der Integer Wert den ich benötige. Über ein Beispiel würde ich mich freuen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1009745</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009745</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Mon, 06 Mar 2006 14:05:38 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Mon, 06 Mar 2006 14:20:43 GMT]]></title><description><![CDATA[<p>cianner schrieb:</p>
<blockquote>
<p>Auch find ich die new/delete Methode nicht wirklich optimal. Normal möchte man doch das die Speicherverwaltung eventuelle Leaks selber killt.<br />
Hier muss man wirklich drauf achten das das delete auch gemacht wird.</p>
</blockquote>
<p>Und bei malloc/free musst Du nicht auf das free achten? <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>
<blockquote>
<p>Hier wäre die Speicherverwaltung dank vector schon auf der &quot;sicheren&quot; Seite. Wie kann ich dort aber einem Zahlenwert wie oben übergeben?<br />
Beispielsweise von Stelle 455 sind 3 Bytes der Integer Wert den ich benötige. Über ein Beispiel würde ich mich freuen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>In dem Fall kannst Du einen vector des kleinsten gemeinsamen Wertes (wenn ich das richtig verstanden habe 1 Byte also char) hernehmen und ansonsten im groben dasselbe wie in C machen. Es gibt auch in C++ keine Datenstruktur für &quot;irgendwas&quot; <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>
<p>BTW: Wenn überall auch kleinere Werte steghen können, woher weisst Du, an welcher Stelle was steht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1009770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009770</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 06 Mar 2006 14:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Mon, 06 Mar 2006 16:04:29 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>cianner schrieb:</p>
<blockquote>
<p>Auch find ich die new/delete Methode nicht wirklich optimal. Normal möchte man doch das die Speicherverwaltung eventuelle Leaks selber killt.<br />
Hier muss man wirklich drauf achten das das delete auch gemacht wird.</p>
</blockquote>
<p>Und bei malloc/free musst Du nicht auf das free achten? <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>
</blockquote>
<p>Ja eben, darum ist die Methode für C++ wohl nicht die optimale, genau darum sagte ich das ja auch.</p>
<p>LordJaxom schrieb:</p>
<blockquote>
<blockquote>
<p>Hier wäre die Speicherverwaltung dank vector schon auf der &quot;sicheren&quot; Seite. Wie kann ich dort aber einem Zahlenwert wie oben übergeben?<br />
Beispielsweise von Stelle 455 sind 3 Bytes der Integer Wert den ich benötige. Über ein Beispiel würde ich mich freuen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>In dem Fall kannst Du einen vector des kleinsten gemeinsamen Wertes (wenn ich das richtig verstanden habe 1 Byte also char) hernehmen und ansonsten im groben dasselbe wie in C machen. Es gibt auch in C++ keine Datenstruktur für &quot;irgendwas&quot; <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>
<p>BTW: Wenn überall auch kleinere Werte steghen können, woher weisst Du, an welcher Stelle was steht?</p>
</blockquote>
<p>Die Positionen sind wie gesagt fest, darum gibts auch eine &quot;Indextabelle&quot;.<br />
Es gibt sogar Kombinationen wo über Bitverschiebung gearbeitet wird <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Das ganze hat mir jetzt aber nicht wirklich weitergeholfen. Wie bekommt man aus dem vector jetzt von Position 455 einmal 3 oder 17 Bytes extrahiert und übergebe die einem float oder bei 17Bytes einem string?</p>
<p>Auch ein char ist ja nicht so optimal, da auch dort Index zum Einsatz kommen können und ein char buffer[2] mit strcpy(buffer,&quot;123456&quot;); auch niemand merkt das dies in die Hose geht. Ich hoffe ein paar Gurus wissen Rat <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1009880</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1009880</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Mon, 06 Mar 2006 16:04:29 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Mon, 06 Mar 2006 20:41:10 GMT]]></title><description><![CDATA[<p>Mal mein Problem an einem Code Beispiel konkretisieren</p>
<pre><code class="language-cpp">int main(int argc, char* argv[])
{
	int zahl = 0;

	// C++ VERSION
	ifstream ifs(&quot;test.dat&quot;);
	if (!ifs) return 1;

	vector&lt;string&gt; vec;
	string s(&quot;&quot;);

	while (ifs.good())
	{
		getline(ifs, s);  //zeilenweise einlesen
		vec.push_back(s); //und in vektor ablegen
	}
	ifs.close();

	memcpy(&amp;zahl,&amp;vec[100],2);
	printf(&quot;\nA: %d&quot;,zahl);

	// C VERSION
    int handle=open(&quot;test.dat&quot;,_O_RDONLY);
    if (!handle) return 1;

	long filesize=filelength(handle);
    unsigned char *oldstyle = (unsigned char*) malloc(filesize+1);
    read(handle,&amp;oldstyle[0],filesize);
    close(handle);
	memcpy(&amp;zahl,&amp;oldstyle[100],2);
	printf(&quot;\nB: %d&quot;,zahl);
	free (oldstyle);

	getch ();
	return 0;
}
</code></pre>
<p>Ausgabe</p>
<p>A: 61453<br />
B: 17490</p>
<p>Kann mir eventuell wer den Fehler sagen und wie man diesen berichtigt? Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1010090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1010090</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Mon, 06 Mar 2006 20:41:10 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Tue, 07 Mar 2006 07:24:47 GMT]]></title><description><![CDATA[<p>hab mir nicht alles angeschaut, aber ich lese immer bis zum dateiende ein (also eof), und nicht, bis ein fehler gesetzt wird!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1010230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1010230</guid><dc:creator><![CDATA[ser1al]]></dc:creator><pubDate>Tue, 07 Mar 2006 07:24:47 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Tue, 07 Mar 2006 07:32:47 GMT]]></title><description><![CDATA[<p>ser1al schrieb:</p>
<blockquote>
<p>hab mir nicht alles angeschaut, aber ich lese immer bis zum dateiende ein (also eof), und nicht, bis ein fehler gesetzt wird!</p>
</blockquote>
<p>Erstens setzt ein EoF auch das failbit und zweitens landest du in einer Endlosschleife, wenn du andere Streaming-Fehler nicht abfängst. Da ist es schon besser, den Gesamtstatus des Streams abzufragen.</p>
<p>@cianner: in der C++ Version fragst du die ersten Bytes von Zeile 100 der Datei ab, in der C-Version die Bytes 100 und 101. Nimm lieber einen vector&lt;char&gt; oder einen Einzelstring und lies per get() den Dateiinhalt ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1010233</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1010233</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 07 Mar 2006 07:32:47 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Tue, 07 Mar 2006 07:40:11 GMT]]></title><description><![CDATA[<p>ok, das habe ich nicht beachtet!<br />
Den streaming-fehler fang ich aber immer ab....!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1010237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1010237</guid><dc:creator><![CDATA[ser1al]]></dc:creator><pubDate>Tue, 07 Mar 2006 07:40:11 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Tue, 07 Mar 2006 07:44:40 GMT]]></title><description><![CDATA[<p>Nachdem ich de Abschnitt deiner Aussage nach geänderthabe, funktioniert es.</p>
<pre><code class="language-cpp">vector&lt;char&gt; vec;
	char chr;

	while (ifs.good())
	{
		ifs.get(chr);
		vec.push_back(chr);
	}
</code></pre>
<p>danke für eure Hilfe, sollte ich doch noch auf Probleme stossen, werde ich wieder euren Rat suchen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1010240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1010240</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Tue, 07 Mar 2006 07:44:40 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Tue, 07 Mar 2006 10:23:49 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>ser1al schrieb:</p>
<blockquote>
<p>hab mir nicht alles angeschaut, aber ich lese immer bis zum dateiende ein (also eof), und nicht, bis ein fehler gesetzt wird!</p>
</blockquote>
<p>Erstens setzt ein EoF auch das failbit und zweitens landest du in einer Endlosschleife, wenn du andere Streaming-Fehler nicht abfängst. Da ist es schon besser, den Gesamtstatus des Streams abzufragen.</p>
</blockquote>
<p>So ganz astrein ist meine Version ja auch noch nicht (vgl. <a href="http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=eof#Answ" rel="nofollow">http://fara.cs.uni-potsdam.de/~kaufmann/?page=GenCppFaqs&amp;faq=eof#Answ</a>), aber man kann sie benutzen, ohne nassgeschwitzt vor dem Rechner zu sitzen <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>
<p>MfG</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1010358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1010358</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Tue, 07 Mar 2006 10:23:49 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Wed, 08 Mar 2006 22:37:19 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char *variable = new char[filesize+1]; // unsigned unnötig da eh nur puffer
</code></pre>
</blockquote>
<p>Warum ist unsigned unnötig?<br />
Wenn man variable[234]==0xAA prüfen will, stehst aber dumm da. Schliesslich liegen in den Dateien Binärdaten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012102</guid><dc:creator><![CDATA[cianner]]></dc:creator><pubDate>Wed, 08 Mar 2006 22:37:19 GMT</pubDate></item><item><title><![CDATA[Reply to malloc in c++? on Thu, 09 Mar 2006 08:37:12 GMT]]></title><description><![CDATA[<p>Dann schon, aber wenn Du sowieso nur Ausschnitte aus dem Vector in andere Typen castest, ist das unerheblich da das Vorzeichen der char's nie ausgewertet wird (da der cast eh binär neu interpretiert).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1012220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1012220</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 09 Mar 2006 08:37:12 GMT</pubDate></item></channel></rss>