<?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[Problem bei Dynamischer Speicherverwaltung]]></title><description><![CDATA[<p>Hallo wie kann ich die Variable char *var; auf die größe von der Variable size setzen ?</p>
<p>Also size gibt z.b. 20 aus dann soll char *var; auch 20 Byte reservieren.<br />
Aber ich weiss nicht mehr wie das geht.</p>
<p>cout&lt;&lt;sizeof(var)&lt;&lt;endl; // gibt immer 4 aus int = 4 Byte.</p>
<pre><code class="language-cpp">#include &lt;windows&gt;
#include &lt;iostream&gt;
using namespace std;

int main()
{

HANDLE file_handle;
DWORD nbt = 0;
int ret =0;

int size;
char *var=&quot;0&quot;;

file_handle =   CreateFile  ( &quot;datei.txt&quot;, GENERIC_READ , FILE_SHARE_READ , 0,  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );
size = GetFileSize ( file_handle , 0 );

var = new char [ size ];

cout&lt;&lt; size &lt;&lt;endl;
cout&lt;&lt;sizeof(var)&lt;&lt;endl;

delete [] var;

system(&quot;PAUSE&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/278648/problem-bei-dynamischer-speicherverwaltung</link><generator>RSS for Node</generator><lastBuildDate>Tue, 25 Aug 2026 04:14:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/278648.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 10 Dec 2010 10:04:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei Dynamischer Speicherverwaltung on Fri, 10 Dec 2010 10:04:55 GMT]]></title><description><![CDATA[<p>Hallo wie kann ich die Variable char *var; auf die größe von der Variable size setzen ?</p>
<p>Also size gibt z.b. 20 aus dann soll char *var; auch 20 Byte reservieren.<br />
Aber ich weiss nicht mehr wie das geht.</p>
<p>cout&lt;&lt;sizeof(var)&lt;&lt;endl; // gibt immer 4 aus int = 4 Byte.</p>
<pre><code class="language-cpp">#include &lt;windows&gt;
#include &lt;iostream&gt;
using namespace std;

int main()
{

HANDLE file_handle;
DWORD nbt = 0;
int ret =0;

int size;
char *var=&quot;0&quot;;

file_handle =   CreateFile  ( &quot;datei.txt&quot;, GENERIC_READ , FILE_SHARE_READ , 0,  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0 );
size = GetFileSize ( file_handle , 0 );

var = new char [ size ];

cout&lt;&lt; size &lt;&lt;endl;
cout&lt;&lt;sizeof(var)&lt;&lt;endl;

delete [] var;

system(&quot;PAUSE&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1992453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992453</guid><dc:creator><![CDATA[char*]]></dc:creator><pubDate>Fri, 10 Dec 2010 10:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Dynamischer Speicherverwaltung on Fri, 10 Dec 2010 10:10:23 GMT]]></title><description><![CDATA[<p>char* schrieb:</p>
<blockquote>
<p>Hallo wie kann ich die Variable char *var; auf die größe von der Variable size setzen ?</p>
<p>Also size gibt z.b. 20 aus dann soll char *var; auch 20 Byte reservieren.<br />
Aber ich weiss nicht mehr wie das geht.</p>
</blockquote>
<p>Dein Code macht schon das was du willst.</p>
<blockquote>
<p>cout&lt;&lt;sizeof(var)&lt;&lt;endl; // gibt immer 4 aus int = 4 Byte.</p>
</blockquote>
<p>Und? var ist ja auch ein Zeiger auf deine 20 Byte, warum solltest du bei sizeof(var) etwas anderes bekommen als die Größe eines Zeigers?</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> Und jetzt erklärst du noch, warum du dafür weder einen vector noch einen string benutzt. Und diese Erklärung sollte verdammt gut sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1992461</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992461</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 10 Dec 2010 10:10:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Dynamischer Speicherverwaltung on Fri, 10 Dec 2010 10:10:39 GMT]]></title><description><![CDATA[<p>Hallo, soweit ich weiß, wird sizeof() zur Compilerzeit ermittelt und nicht zur Laufzeit! Somit kann sizeof() bei dynamisch allozierten Arrays nicht richtig rechnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1992462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992462</guid><dc:creator><![CDATA[anon186]]></dc:creator><pubDate>Fri, 10 Dec 2010 10:10:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Dynamischer Speicherverwaltung on Fri, 10 Dec 2010 10:11:30 GMT]]></title><description><![CDATA[<p>sizeof wird zur Compilezeit ausgewertet und ist konstant. Mit sizeof(var) kriegst du hier die Größe des Zeigers - bei dir 4 Byte - nicht die Größe des Speicherbereichs, auf den dieser zeigt. Diesen wirst du dir an anderer Stelle merken müssen (etwa in size).</p>
<p>Alternativ könntest du natürlich std::vector oder std::string benutzen, beide haben eine .size()-Methode:</p>
<pre><code class="language-cpp">#include &lt;string&gt;

// ...

std::string var = &quot;0&quot;;
assert(var.size() == 1);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1992464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992464</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 10 Dec 2010 10:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Dynamischer Speicherverwaltung on Fri, 10 Dec 2010 10:11:30 GMT]]></title><description><![CDATA[<p>Das passt schon so. Der Wert von sizeof ist die Größe des Zeigers. Die Elemente-Anzahl musst du dir selber merken. Abhilfe schafft ein std::vector, der kennt immer seine Größe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1992463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992463</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Fri, 10 Dec 2010 10:11:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Dynamischer Speicherverwaltung on Fri, 10 Dec 2010 10:16:50 GMT]]></title><description><![CDATA[<p>Ich hab kein string oder vector genommen weil ich wissen wollte wie das ganze mit char* funktioniert. (=</p>
<p>Aber danke für die Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1992469</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992469</guid><dc:creator><![CDATA[char*]]></dc:creator><pubDate>Fri, 10 Dec 2010 10:16:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Dynamischer Speicherverwaltung on Fri, 10 Dec 2010 10:22:16 GMT]]></title><description><![CDATA[<p>Wenn du einen char* bzw. vector&lt;char&gt; verwendest und diesen direkt ausgeben lassen möchtest, sollte er nullterminiert sein.</p>
<pre><code class="language-cpp">var = new char [ size +1 ]; 
// aus Datei einlesen
var[size] = 0;

cout &lt;&lt; var &lt;&lt; endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1992475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992475</guid><dc:creator><![CDATA[Vicious Falcon]]></dc:creator><pubDate>Fri, 10 Dec 2010 10:22:16 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Dynamischer Speicherverwaltung on Fri, 10 Dec 2010 10:31:54 GMT]]></title><description><![CDATA[<p>char* schrieb:</p>
<blockquote>
<p>Ich hab kein string oder vector genommen weil ich wissen wollte wie das ganze mit char* funktioniert. (=</p>
<p>Aber danke für die Antworten.</p>
</blockquote>
<p>Okay, dann kurz die Unterschiede:</p>
<pre><code class="language-cpp">size_t size = 20; // Groeße festlegen
// ab hier weiter mit char *
char * feld = new char[size];
char element = feld[pos];
char * pelement = &amp;feld[pos];
// wie groß war nochmal feld?
size;
delete [] feld;
// und hier mit vector
std::vector&lt;char&gt; feld(size);
char element = feld[pos];
char * pelement = &amp;feld[pos];
// wie groß war nochmal feld?
feld.size();
// feld löschen? unnötig Destructor wird automatisch gerufen, wenn das Objekt den Gültigkeitsbereich verlässt
</code></pre>
<p>Wie man erkennen kann liegt der Unterschied darin, dass ich kein delete[] vergessen kann und mir nicht die Größe merken brauch.<br />
Ein weiterer Vorteil tritt auf, wenn du mehr Platz benötigst. Dann erledigt der vector das umkopieren automatisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1992483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1992483</guid><dc:creator><![CDATA[Nick Unbekannt]]></dc:creator><pubDate>Fri, 10 Dec 2010 10:31:54 GMT</pubDate></item></channel></rss>