<?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[Struct Pointer auf 0 abfragen]]></title><description><![CDATA[<p>Hallo.<br />
Folgendes Problem:</p>
<p>in c++ kann ichja folgendes machen<br />
Object *obj = new Object()<br />
if (obj == 0)<br />
do sth</p>
<p>in C:</p>
<p>Struct *str;<br />
initStruct(str);<br />
if (str == 0)<br />
do sth</p>
<p>das problem: str is bei mir immer 0x0....was mach ich da falsch? bzw geht die abfrage in C so überhaupt?</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230090/struct-pointer-auf-0-abfragen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 11:22:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230090.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 20 Dec 2008 11:49:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Struct Pointer auf 0 abfragen on Sat, 20 Dec 2008 11:49:47 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Folgendes Problem:</p>
<p>in c++ kann ichja folgendes machen<br />
Object *obj = new Object()<br />
if (obj == 0)<br />
do sth</p>
<p>in C:</p>
<p>Struct *str;<br />
initStruct(str);<br />
if (str == 0)<br />
do sth</p>
<p>das problem: str is bei mir immer 0x0....was mach ich da falsch? bzw geht die abfrage in C so überhaupt?</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633249</guid><dc:creator><![CDATA[Killver]]></dc:creator><pubDate>Sat, 20 Dec 2008 11:49:47 GMT</pubDate></item><item><title><![CDATA[Reply to Struct Pointer auf 0 abfragen on Sat, 20 Dec 2008 11:53:49 GMT]]></title><description><![CDATA[<p>Willst du in einer Funktion einen Pointer verändern, so musst du einen Pointer auf diesen Pointer übergeben.</p>
<pre><code class="language-cpp">void initStruct(Struct **str) {
  *str = malloc(...);
}

Struct *str;
initStruct(&amp;str);
if (str == 0)
do sth
</code></pre>
<p>Oder alternativ mit Rückgabewerten arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633252</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 20 Dec 2008 11:53:49 GMT</pubDate></item><item><title><![CDATA[Reply to Struct Pointer auf 0 abfragen on Sat, 20 Dec 2008 13:13:23 GMT]]></title><description><![CDATA[<p>was willst du denn überhaupt machen?</p>
<pre><code class="language-cpp">Object *obj = new Object() 
if (obj == 0)
//...
</code></pre>
<p>du wirst hier nie in den if-zweig reinkommen... new gibt entweder einen (gültigen) pointer zurück oder schmeist eine exception (std::bad_alloc) - dieses verhalten kann man aber z.bsp. mit new(std::nothrow) umgehen...</p>
<p>ansonsten schreib bei nem Vergleich besser nur <code>if(obj)</code> - ist imho übersichtlicher weil man sofort sieht, was passieren soll...</p>
<p>falls du das objekt an eine funktion übergeben willst, solltest du zunächst überlegen, ob du jmd ermöglichen willst, einen Nullptr zu übergeben - falls dies nicht der Fall ist, dann nimm Referenzen (sind intern nichts anderes als pointer, aber mit ihnen kann man sehr viel besser umgehen). Falls du den Pointer ändern willst musst du ne Referenz auf nen Pointer übergeben (oder halt nen Pointer auf nen Pointer, aber das halte ich nicht für sinnvoll ^^)...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633275</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 20 Dec 2008 13:13:23 GMT</pubDate></item><item><title><![CDATA[Reply to Struct Pointer auf 0 abfragen on Sat, 20 Dec 2008 14:37:21 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>ansonsten schreib bei nem Vergleich besser nur <code>if(obj)</code> - ist imho übersichtlicher weil man sofort sieht, was passieren soll...</p>
</blockquote>
<p>Ich finde zum Beispiel eine explizite Überprüfung auf Null übersichtlicher. Aber das ist Geschmackssache... <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>Killver schrieb:</p>
<blockquote>
<p>in c++ kann ichja folgendes machen<br />
Object *obj = new Object()<br />
if (obj == 0)<br />
do sth</p>
</blockquote>
<p>Nein.</p>
<p>Entweder du benutzt <code>std::nothrow</code> :</p>
<pre><code class="language-cpp">Object* obj = new (std::nothrow) Object();
if (obj == NULL)
{
    std::cout &lt;&lt; &quot;Fehler beim Allokieren aufgetreten.&quot; &lt;&lt; std::endl;
}
</code></pre>
<p>Oder du prüfst auf Exceptions:</p>
<pre><code class="language-cpp">try
{
    Object* obj = new Object();
}
catch (std::bad_alloc&amp; e)
{
    std::cerr &lt;&lt; &quot;Exception beim Allokieren aufgetreten: &quot; &lt;&lt; e.what() &lt;&lt; std::endl;
}
</code></pre>
<p>Aber da der Fehler in der Praxis kaum jemals vorkommt, ist das auch nicht allzu relevant.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633306</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 20 Dec 2008 14:37:21 GMT</pubDate></item></channel></rss>