<?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[mittels malloc den heap alloziieren bis return NULL]]></title><description><![CDATA[<p>in einer schleife sollen solange 4MB auf dem heap alloziiert werde bis NUll zurückgegeben wird!</p>
<pre><code>int main(void)
{
int *p;

do
{

 p=(int *)malloc(4000000);

}
while( p != NULL);

printf(&quot;heap voll&quot;);
free(p);
getchar();
}
</code></pre>
<p>ist nur ein auszug des codes!</p>
<p>im task manager sehe ich wieder der speicher sich füllt, aber er bricht nicht ab, sprich NULL wird nicht zurückgegeben.<br />
er alloziiert doch bei jedem schleifendurchlauf immer wieder 4 MB oder?<br />
dabei zeigt p jedesmal auf die anfangsadresse dieses jeweiligen 4 MB bereiches?<br />
was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/183041/mittels-malloc-den-heap-alloziieren-bis-return-null</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 15:35:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/183041.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 31 May 2007 22:48:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Thu, 31 May 2007 22:53:42 GMT]]></title><description><![CDATA[<p>in einer schleife sollen solange 4MB auf dem heap alloziiert werde bis NUll zurückgegeben wird!</p>
<pre><code>int main(void)
{
int *p;

do
{

 p=(int *)malloc(4000000);

}
while( p != NULL);

printf(&quot;heap voll&quot;);
free(p);
getchar();
}
</code></pre>
<p>ist nur ein auszug des codes!</p>
<p>im task manager sehe ich wieder der speicher sich füllt, aber er bricht nicht ab, sprich NULL wird nicht zurückgegeben.<br />
er alloziiert doch bei jedem schleifendurchlauf immer wieder 4 MB oder?<br />
dabei zeigt p jedesmal auf die anfangsadresse dieses jeweiligen 4 MB bereiches?<br />
was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296304</guid><dc:creator><![CDATA[wanderameise]]></dc:creator><pubDate>Thu, 31 May 2007 22:53:42 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Thu, 31 May 2007 23:29:51 GMT]]></title><description><![CDATA[<p>das programm läuft ohne deine genannten probleme, mit dem malloc ists klar...<br />
wenn dein ramspeicher voll ist lagert dein pc einen teil auf die festplatte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296310</guid><dc:creator><![CDATA[Stelfer]]></dc:creator><pubDate>Thu, 31 May 2007 23:29:51 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Fri, 01 Jun 2007 00:20:49 GMT]]></title><description><![CDATA[<p>Wenn du das im Release läufen lässt, sollte der Speicher in null-komma-nix voll sein. Besser gesagt: der Adressraum wird &quot;voll&quot;. Ausgenommen mal ein 64 Bit System, da könnte es eher lange dauern, vorausgesetzt das Swapfile ist ausreichend gross.</p>
<p>Wenn du den Code aber im Debug laufen lässt wird es ewig dauern, da im Debug der &quot;frische&quot; Speicher meist mit einem speziellen Pattern (0xCD bei MSVC) angefüllt wird. Dadurch muss der virtuelle Speicher wirklich &quot;hereingebracht&quot; werden, also mit echtem RAM &quot;unterlegt&quot;. Das führt dann zu heftigem Paging, da irgendwann das RAM voll ist, und die ganzen älteren 0xCDCDCDCD erstmal ins Pagefile geschrieben werden müssen. Kann dann recht lange dauern bis malloc mal 0 zurückliefert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296319</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 01 Jun 2007 00:20:49 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Fri, 01 Jun 2007 15:18:14 GMT]]></title><description><![CDATA[<p>und was mache ich jetzt wenn ich erreichen will das er abbricht sobal das ram voll ist?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296737</guid><dc:creator><![CDATA[wanderameise12]]></dc:creator><pubDate>Fri, 01 Jun 2007 15:18:14 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Fri, 01 Jun 2007 15:22:54 GMT]]></title><description><![CDATA[<p>Geht eben nicht, weil du nicht merken kannst, wann der Speicherplatz auf virtuellem (statt wirklichem) RAM alloziert wird. Du kannst aber nachschauen, wieviel Arbeitsspeicher frei ist und entsprechend viel holen, dann ist er auch voll (obwohl dann glaubich auch ein großer Teil auf der Festplatte ausgelagert wird, jedenfalls unter Windows).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296743</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 01 Jun 2007 15:22:54 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Fri, 01 Jun 2007 15:24:37 GMT]]></title><description><![CDATA[<p>&quot;task manager&quot; klingt nach windows. das programm sollte eigentlich maximal 2 gb ram allozieren dürfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296746</guid><dc:creator><![CDATA[zrzz5r]]></dc:creator><pubDate>Fri, 01 Jun 2007 15:24:37 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Fri, 01 Jun 2007 15:38:45 GMT]]></title><description><![CDATA[<p>Du kannst Dir aber die Speicherinfos über ne WinAPI-Funktion (<a href="http://msdn2.microsoft.com/en-us/library/aa366589.aspx" rel="nofollow">GlobalMemoryStatusEx</a>) holen. Oder Du läuscht an Deinem PC-Gehäuse, wenns permanent rattert, weißte das Deine HD in Aktion tritt <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="😃"
    /> .<br />
PS:<br />
Das:</p>
<pre><code class="language-cpp">free(p);
</code></pre>
<p>bringt auch nit mehr viel *g*.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1296757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296757</guid><dc:creator><![CDATA[CodeFinder]]></dc:creator><pubDate>Fri, 01 Jun 2007 15:38:45 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Fri, 01 Jun 2007 17:19:35 GMT]]></title><description><![CDATA[<p>CodeFinder schrieb:</p>
<blockquote>
<p>PS:<br />
Das:</p>
<pre><code class="language-cpp">free(p);
</code></pre>
<p>bringt auch nit mehr viel *g*.</p>
</blockquote>
<p>physikalischer speicher war 4xx Mb frei, die waren ruckzuck weg. die auslagerungsdatei ist über 1.1 gig gewachsen!hm</p>
<p>wie löse ich denn dann die aufgabe?</p>
<blockquote>
<p>Dynamische Speicherverwaltung<br />
Testen Sie den Speicherausbau Ihres Rechners.<br />
Schreiben Sie ein Programm, mit dem Sie solange in einer Schleife jeweils 4 Mbyte<br />
Speicher auf dem Heap alloziieren bis das System mit dem Rückgabewert NULL zeigt,<br />
dass der mögliche Speicher aufgebraucht ist.<br />
Speichern Sie die Pointer in einem Array und geben Sie den Speicher anschliessend<br />
wieder geordnet frei. Geben Sie bei jeder Allokation/Deallokation auf der Konsole den<br />
Index der Operation und die Adresse des zugehörigen Pointers aus.<br />
Wieviele Blöcke von 4 MB können Sie alloziieren? Bitte begründen Sie die Grösse.<br />
Gibt es eine prinzipielle Grenze?<br />
Beobachten Sie im Task-Manager die Zunahme/Abnahme der Speichernutzung.<br />
Stimmen die Angaben im Task-Manager mit Ihrer eigenen Abschätzung überein?<br />
Sie sehen unterschiedliche Geschwindigkeiten der Zuweisung von Speicher. Warum?<br />
Stimmt der Übergang mit Ihrer Kenntnis über den Speicherausbau des Systems überein?</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1296817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1296817</guid><dc:creator><![CDATA[wanderasmeise12]]></dc:creator><pubDate>Fri, 01 Jun 2007 17:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Mon, 04 Jun 2007 21:34:00 GMT]]></title><description><![CDATA[<p>and push<br />
habe die aufgabe mal angehängt!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298944</guid><dc:creator><![CDATA[wanderameise]]></dc:creator><pubDate>Mon, 04 Jun 2007 21:34:00 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Mon, 04 Jun 2007 22:13:32 GMT]]></title><description><![CDATA[<p>Was hast du denn fürn OS?</p>
<p>Bei mir (Windows XP) bricht das Programm &quot;sofort&quot; ab, weil der Speicher voll<br />
ist.</p>
<p>btw:<br />
Gut dass, du wenigstens 4MB von den XXXMB wieder frei gibst <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/1298958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298958</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 04 Jun 2007 22:13:32 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Mon, 04 Jun 2007 22:24:41 GMT]]></title><description><![CDATA[<p>wanderameise schrieb:</p>
<blockquote>
<p>habe die aufgabe mal angehängt!!</p>
</blockquote>
<p>Wo ist denn die Frage ? Poste mal was Du schon hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1298961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298961</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 04 Jun 2007 22:24:41 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Mon, 04 Jun 2007 22:32:45 GMT]]></title><description><![CDATA[<p>Oh...</p>
<p>Das delete ist ja noch effektiver, fällt mir gerade auf...<br />
delete 0 <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1298966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1298966</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 04 Jun 2007 22:32:45 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Wed, 13 Jun 2007 08:53:47 GMT]]></title><description><![CDATA[<p>habe nur diesen teil code</p>
<pre><code>int main(void)
{
int *p;

do
{

 p=(int *)malloc(4000000);

}
while( p != NULL);

printf(&quot;heap voll&quot;);
free(p);
getchar();
}
</code></pre>
<p>aber er bricht nicht ab nachdem der RAM voll ist sondern schreibt wie es scheint auf der festplatte weiter!meine frage war, wann er denn nun abbricht und wie man herausfindet wieviel er insgesamt schreibt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304647</guid><dc:creator><![CDATA[wanderameise123]]></dc:creator><pubDate>Wed, 13 Jun 2007 08:53:47 GMT</pubDate></item><item><title><![CDATA[Reply to mittels malloc den heap alloziieren bis return NULL on Wed, 13 Jun 2007 14:22:10 GMT]]></title><description><![CDATA[<p>Ähm... Irgendwie... Hast du unsere Beiträge nicht gelesen?</p>
<p>Ich denke mal, er bricht ab, wenn die Maximal-Größe der Auslagerungsdatei erreicht ist.<br />
Und wieviel er schreibt? Wie denn &quot;schreibt&quot;? Meinst du, wieviel RAM du nun gefordert hast? Mach dir eine Variable vor die do-Schleife und zähl sie in jedem Durchlauf um 4000000 hoch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1304914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1304914</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 13 Jun 2007 14:22:10 GMT</pubDate></item></channel></rss>