<?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[Pointer und malloc frage]]></title><description><![CDATA[<p>servus,</p>
<p>ist es üblich pointer bzw. arrays immer zuerst mit NULL zu initialisieren also sowas:</p>
<pre><code class="language-cpp">int* my_arr = NULL;
</code></pre>
<p>Und ist das folgende eine übliche Art um zu testen ob malloc funktioniert hat?</p>
<pre><code class="language-cpp">arr = (double *) malloc(sizeof(double));
if (! arr) {
	std::cout &lt;&lt; &quot;\n failed to malloc arr.&quot; &lt;&lt; std::endl;
	exit(1);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/188686/pointer-und-malloc-frage</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 04:19:44 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188686.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Aug 2007 22:02:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer und malloc frage on Thu, 02 Aug 2007 22:02:52 GMT]]></title><description><![CDATA[<p>servus,</p>
<p>ist es üblich pointer bzw. arrays immer zuerst mit NULL zu initialisieren also sowas:</p>
<pre><code class="language-cpp">int* my_arr = NULL;
</code></pre>
<p>Und ist das folgende eine übliche Art um zu testen ob malloc funktioniert hat?</p>
<pre><code class="language-cpp">arr = (double *) malloc(sizeof(double));
if (! arr) {
	std::cout &lt;&lt; &quot;\n failed to malloc arr.&quot; &lt;&lt; std::endl;
	exit(1);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1337710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337710</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Thu, 02 Aug 2007 22:02:52 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Thu, 02 Aug 2007 22:25:35 GMT]]></title><description><![CDATA[<p>oder wie sollte man wenn man z.B mit new alloziiert in C++ dann testen ob alles ok gegange ist...mittels try und catch dann abfangen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337726</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Thu, 02 Aug 2007 22:25:35 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Thu, 02 Aug 2007 23:11:31 GMT]]></title><description><![CDATA[<p>Ja, new gibt ja nie NULL zurück, sondern schmeißt eine Exception, wenn kein Speicher mehr da ist. Im Regelfall ist aber immer genug Speicher da, außer du orderst einige Gigabyte <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 />
Grundsätzlich würde ich nicht damit rechnen, dass der Speicher leer wird, und wenn doch, dann musst du dein Prog wahrscheinlich beenden. Ich weiß nicht, was für eine Exception new dann schmeißt, aber die kannst du imho getrost in der main-Funktion auffangen, also alles in der main in einen try-Block schließen.<br />
Und ich glaube, man kann auch eine eigene Funktion angeben, die aufgerufen wird, wenn malloc nicht genug Speicher ranholen kann..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337743</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 02 Aug 2007 23:11:31 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 10:08:29 GMT]]></title><description><![CDATA[<blockquote>
<p>du imho getrost in der main-Funktion auffangen, also alles in der main in einen try-Block schließen.</p>
</blockquote>
<p>hmm wie sollte das gehen? Einfach wirklich in der main das komplette programm klammern?</p>
<p>aber wie sieht der catch() - block dann aus ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337976</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 03 Aug 2007 10:08:29 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 10:09:15 GMT]]></title><description><![CDATA[<p>...und macht man es nicht so, dass man jedesmal wenn man speicher alloziiert wirklich gezielt testet obs geklappt hat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337978</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 03 Aug 2007 10:09:15 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 10:12:40 GMT]]></title><description><![CDATA[<p>testo schrieb:</p>
<blockquote>
<blockquote>
<p>du imho getrost in der main-Funktion auffangen, also alles in der main in einen try-Block schließen.</p>
</blockquote>
<p>hmm wie sollte das gehen? Einfach wirklich in der main das komplette programm klammern?</p>
</blockquote>
<p>main() ist das komplette Programm - alles andere wird (direkt oder indirekt) von dort aus aufgerufen.</p>
<blockquote>
<p>aber wie sieht der catch() - block dann aus ?</p>
</blockquote>
<p>Je nach Spezifität hast du die Wahl zwischen:</p>
<pre><code class="language-cpp">catch(std::bad_alloc&amp; e)  // das ist die Exception, die new bei Fehlern wirft
{
  ...
}
catch(std::exception&amp; e)  // das schließt alle in der STL auftretenden Exceptions ein
{
  ...
}
catch(...)                // das fängt ALLES, was nicht bereits behandelt werden konnte
{
  ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1337983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337983</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 03 Aug 2007 10:12:40 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 10:16:53 GMT]]></title><description><![CDATA[<p>Danke - also macht man es nicht so dass bei jedem new getestet wird, sondern wirklich nur einmal in der main ein try-catch block mit std::bad_alloc ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337987</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 03 Aug 2007 10:16:53 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 10:22:22 GMT]]></title><description><![CDATA[<p>Nicht unbedingt in der main - normalerweise setzt man einen try-catch dorthin, wo man denkt, mit auftretenden Fehlern umgehen zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1337996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337996</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 03 Aug 2007 10:22:22 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 10:22:28 GMT]]></title><description><![CDATA[<p>testo schrieb:</p>
<blockquote>
<p>Danke - also macht man es nicht so dass bei jedem new getestet wird, sondern wirklich nur einmal in der main ein try-catch block mit std::bad_alloc ?</p>
</blockquote>
<p>könntest du machen. mit den exceptions hast du im gewissen sinne einen alternativen kontrollfluss in deinem programm.<br />
im unterschied zu 'new' werden bei 'malloc' keine exceptions geworfen. da musste dann weiterhin die 0 abfragen.<br />
<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/1337997</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337997</guid><dc:creator><![CDATA[Undertaker]]></dc:creator><pubDate>Fri, 03 Aug 2007 10:22:28 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 10:25:04 GMT]]></title><description><![CDATA[<p>Ich teste üblicherweise nicht, da bei new eher selten was schiefgeht. Lediglich wenn sehr große Mengen Speicher angefordert werden können halte ich einen Test für sinnvoll und natürlich wenn der aufgerufene Konstruktor eine Exception werfen kann. das ist aber ein anderes Problem.<br />
Es gibt eine Variante des Operator new der keine Exception wirft und statt dessen 0 zurückgibt.</p>
<pre><code class="language-cpp">new(nothrow)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1337999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337999</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 03 Aug 2007 10:25:04 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 10:32:14 GMT]]></title><description><![CDATA[<p>hmm.....ich weiß jetzt nicht wie es sauber wäre....wie macht man es denn üblicherweise?<br />
ich habe in meinem programm sehr viele new anweisungen und es könnte durchaus sein dass ich mehr als 1 GB alloziiere...des öfteren.</p>
<p>Ich würde es gerne richtig machen bzw. so dass es sinnvoll &amp; sauber ist...</p>
<p>schwierig schwierig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338009</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 03 Aug 2007 10:32:14 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 11:24:14 GMT]]></title><description><![CDATA[<p>Käme denn dein Programm theoretisch damit klar, wenn kein Speicher mehr zur Verfügung steht?<br />
Ich sehe 2 Möglichkeiten: 1. Der Speicher ist alle und du kannst dein Programm dichtmachen. Was willst du groß machen, wenn du z.B. noch nicht einmal eine Instanz einer Klasse anlegen kannst?<br />
2. Du stehst kurz davor, eine außergewöhnlich große Menge (z.B. halt mehr als 50 MB) an Speicher zu holen. Wenn das fehlschlägt, kannst du halt die folgende Berechnung, Speicherung oder was auch immer nicht durchführen. Oder du bastelst dir einen Ersatzalgo, der die Daten auf der Festplatte lagert und immer stückweise nachlädt.</p>
<p>Für den ersteren Fall würde ich die Main-Funktion mit dem bad_alloc-try-Block umschließen, ne Meldung rausgeben und das Programm schließen. Im zweiten Fall kannst du das new oder die entsprechende Berechnungs-/Speicherungsfunktion mit einem solchen Block kapseln, bei Speichermangel eine Meldung ausgeben und das Programm ansonsten weiterlaufen lassen - oder halt auf die HDD-Lösung umsteigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338052</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 03 Aug 2007 11:24:14 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 11:39:15 GMT]]></title><description><![CDATA[<p>Musst du denn wirklich die ganze Zeit sooo viel Daten im Speicher haben? Schau dich mal im Netz nach dem Proxy-pattern um. Dabei geht es darum, eine Klasse, die sehr viele Daten beinhaltet, so zu gestalten, dass sie Die Daten zwischenspeichern kann und nur bei Bedarf in den Arbeitspeicher laedt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338078</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338078</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 03 Aug 2007 11:39:15 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 11:47:34 GMT]]></title><description><![CDATA[<p>wie sieht es denn mit zeitkritischen anwendungen aus? Ich glaube das auslagern und einlagern in den Speicher kostet zu viel zeit....oder nicht? was macht man denn in dem fall?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338087</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 03 Aug 2007 11:47:34 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 11:50:05 GMT]]></title><description><![CDATA[<p>Programme, die mit so großen Datenmengen hantieren müssen, sind nur selten zeitkritisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338091</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338091</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 03 Aug 2007 11:50:05 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 12:16:35 GMT]]></title><description><![CDATA[<p>also ich kann mir vorstellen das bei numerischer simulation durchaus systeme betrachtet werden die z.B 10^10 einträge ...aber sicher weiß ich das jetzt nicht.</p>
<p>Ich würde gerne eine bad_alloc exception auslösen- wie schaffe ich das?<br />
habe es banal mal so versucht:</p>
<pre><code class="language-cpp">for(long i = 0; i &lt; 2; i--)
			int * arr = (int*) malloc(100000*sizeof(int));
</code></pre>
<p>ging aber net <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338111</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 03 Aug 2007 12:16:35 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 13:02:03 GMT]]></title><description><![CDATA[<p>Das ist auch nicht gerade GB-Bereich <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="🙂"
    /> Und, wie schon gesagt wurde, <em>new</em> wirft die Exception, malloc nicht...<br />
Und die heutigen Betriebssysteme können dir meistens auch ne Ecke mehr Speicher besorgen als das, was in den RAM passt. Das wird dann halt auch auf der Festplatte ausgelagert, dafür gibts in Windows die Auslagerungsdatei und unter Linux die Swap-Partition.</p>
<p>edit: oh, ok, i--, wird wahrscheinlich doch GB-Bereich..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338158</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 03 Aug 2007 13:02:03 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 13:07:24 GMT]]></title><description><![CDATA[<p>ich hirsch ...klar jetzt gehts....<br />
was wird denn in e gespeichert....ist das folgende soweit in Ordnung?</p>
<pre><code class="language-cpp">try
{
...
}
	catch(std::bad_alloc &amp;e) 
	{
		std::cerr &lt;&lt; e.what() &lt;&lt; std::endl;
		std::cerr &lt;&lt; &quot;\n\tPROGRAM ABORTED:\n\t\t  ERROR: Not enough memory.\n&quot; &lt;&lt; std::endl;
		std::cerr &lt;&lt; &quot;\t===========================================\n&quot; &lt;&lt; std::endl;
		abort();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1338162</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338162</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 03 Aug 2007 13:07:24 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und malloc frage on Fri, 03 Aug 2007 13:12:30 GMT]]></title><description><![CDATA[<p>Was für Informationen bad_alloc wirklich mitbringt, ist vom Standard nicht spezifiziert. Das einzig sichere ist, daß e.what() eine (btw implementationsspezifische) Meldung gibt, die den eingetroffenen Fehler beschreibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1338165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1338165</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 03 Aug 2007 13:12:30 GMT</pubDate></item></channel></rss>