<?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: Vergleichen und Manipulieren (um Nachbarshaften festzustellen)]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hoffe ich kann mein Problem hier verstaendlich darstellen:<br />
Ich habe eine Struktur namens element. Es existieren viele Objekte dieser struktur; jedes hat vier Nachbarn dessen Adressen in den Pointern neighbour1 bis 4 gespeichert sind.<br />
Die Funtkion getPointerToThis sucht nun welcher pointer eines Nachbarn auf das aktuelle Element zeigt. Das funktioniert auch (denke ich).<br />
Nun will ich den gefundenen Pointer auf ein anderes Element zeigen lassen, dabei bekomme ich aber ein &quot;Segmentation Fault&quot;.<br />
Kann mir bitte jemand sagen was ich hier falsch mache? (ausgenommen der Tatsache, dass ich ueberhaupt Pointer verwende)</p>
<pre><code class="language-cpp">typedef QVector&lt;element&gt; elementList
elementList elementList;
.....
element* thisElement;
....

element** pointerFromNeigbour;
pointerFromNeigbour  = getPointerToThis (thisElement, thisElement-&gt;neighbour1);
*pointerFromNeigbour = &amp;m_elementList[index];
....

element** someClass::getPointerToThis (element* thisElement, element* neighbour)
{
    // get pointer pointing on thisElement
    if      (&amp;thisElement== &amp;neighbour-&gt;neighbour1) {return &amp;neighbour-&gt;neighbour1;}
    else if (&amp;thisElement== &amp;neighbour-&gt;neighbour2) {return &amp;neighbour-&gt;neighbour2;}
    else if (&amp;thisElement== &amp;neighbour-&gt;neighbour3) {return &amp;neighbour-&gt;neighbour3;}
    else if (&amp;thisElement== &amp;neighbour-&gt;neighbour4) {return &amp;neighbour-&gt;neighbour4;}
    else {return NULL;//ist privisorisch}
    return NULL;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/291073/pointer-vergleichen-und-manipulieren-um-nachbarshaften-festzustellen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 23:24:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/291073.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 10 Aug 2011 08:10:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer: Vergleichen und Manipulieren (um Nachbarshaften festzustellen) on Wed, 10 Aug 2011 08:10:15 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hoffe ich kann mein Problem hier verstaendlich darstellen:<br />
Ich habe eine Struktur namens element. Es existieren viele Objekte dieser struktur; jedes hat vier Nachbarn dessen Adressen in den Pointern neighbour1 bis 4 gespeichert sind.<br />
Die Funtkion getPointerToThis sucht nun welcher pointer eines Nachbarn auf das aktuelle Element zeigt. Das funktioniert auch (denke ich).<br />
Nun will ich den gefundenen Pointer auf ein anderes Element zeigen lassen, dabei bekomme ich aber ein &quot;Segmentation Fault&quot;.<br />
Kann mir bitte jemand sagen was ich hier falsch mache? (ausgenommen der Tatsache, dass ich ueberhaupt Pointer verwende)</p>
<pre><code class="language-cpp">typedef QVector&lt;element&gt; elementList
elementList elementList;
.....
element* thisElement;
....

element** pointerFromNeigbour;
pointerFromNeigbour  = getPointerToThis (thisElement, thisElement-&gt;neighbour1);
*pointerFromNeigbour = &amp;m_elementList[index];
....

element** someClass::getPointerToThis (element* thisElement, element* neighbour)
{
    // get pointer pointing on thisElement
    if      (&amp;thisElement== &amp;neighbour-&gt;neighbour1) {return &amp;neighbour-&gt;neighbour1;}
    else if (&amp;thisElement== &amp;neighbour-&gt;neighbour2) {return &amp;neighbour-&gt;neighbour2;}
    else if (&amp;thisElement== &amp;neighbour-&gt;neighbour3) {return &amp;neighbour-&gt;neighbour3;}
    else if (&amp;thisElement== &amp;neighbour-&gt;neighbour4) {return &amp;neighbour-&gt;neighbour4;}
    else {return NULL;//ist privisorisch}
    return NULL;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2104276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104276</guid><dc:creator><![CDATA[yumarge]]></dc:creator><pubDate>Wed, 10 Aug 2011 08:10:15 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer: Vergleichen und Manipulieren (um Nachbarshaften festzustellen) on Wed, 10 Aug 2011 08:25:34 GMT]]></title><description><![CDATA[<p>yumarge schrieb:</p>
<blockquote>
<p>Die Funtkion getPointerToThis sucht nun welcher pointer eines Nachbarn auf das aktuelle Element zeigt. Das funktioniert auch (denke ich).</p>
</blockquote>
<p>Denke ich nicht.<br />
Du vergleichst die Adressen der Zeiger. Einer davon ist ein Funktionsparameter, d.h. der Vergleich der Adressen der Zeiger wird nie positiv ausgehen.<br />
Du musst den Inhalt der Zeiger vergleichen.</p>
<p>Beim Zurückgeben passt dann die Adresse, da dich der Wert ja nicht interessiert, sondern du über die Adresse den Zeiger ändern möchtest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104287</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 10 Aug 2011 08:25:34 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer: Vergleichen und Manipulieren (um Nachbarshaften festzustellen) on Wed, 10 Aug 2011 09:21:25 GMT]]></title><description><![CDATA[<p>danke hustabear fuer die schnelle und vor allem gut verstaendliche Antwort!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104306</guid><dc:creator><![CDATA[yumarge]]></dc:creator><pubDate>Wed, 10 Aug 2011 09:21:25 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer: Vergleichen und Manipulieren (um Nachbarshaften festzustellen) on Wed, 10 Aug 2011 10:01:23 GMT]]></title><description><![CDATA[<p>Nochwas: du weisst schon, dass die Adresse der Elemente in einem Vektor sich ändern kann, wenn die grösse des Vektors sich ändert?</p>
<p>D.h. wenn du etwas in m_elementList einfügst, kann es sein, dass die Zeiger die ehemals auf Elemente in m_elementList gezeigt haben dann ins leere zeigen.</p>
<p>ps: noch zwei Dinge:<br />
assert() ist gut, wenn man Dinge hat, wo man meint die müssten immer so sein, und das abchecken will.<br />
z.B. in deinem Fall:</p>
<pre><code class="language-cpp">pointerFromNeigbour  = getPointerToThis (thisElement, thisElement-&gt;neighbour1);
assert(pointerFromNeigbour != 0);
</code></pre>
<p>Dann hättest du sofort bemerkt dass getPointerToThis - unerwarteterweise - NULL zurückgibt.</p>
<p>Und wenn du nen Segmentation-Fault bekommst...<br />
Wenn du das Programm dabei aus der IDE mit &quot;Start Debug&quot; o.ä. gestartet hast, dann sollte das Programm bei einem Segmentation-Fault oder ähnlichen Fehlern einfach angehalten werden. Und zwar so, dass du in der IDE alle möglichen Dinge angucken/überprüfen kannst. Unter anderem kann man den Inhalt von Variablen ansehen.<br />
Wäre auch eine Möglichkeit gewesen den Fehler selbst schnell zu finden.</p>
<p>Ich erwähne das, weil ich schön langsam den Eindruck habe, dass viele Leute einfach nicht wissen was man mit einer modernen (=weniger als 10 Jahre alt) IDE alles machen kann. Speziell was Debuggen angeht. Deine Frage ist da nur eine von vielen die in letzter Zeit gestellt wurden, wo ich mir denke - &quot;wie kann man es schaffen da <em>nicht</em> selbst draufzukommen&quot;. Und die einzige Antwort die mir dazu einfällt, ist: indem man nicht weiss wie man mit dem Debugger umgeht <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/2104321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104321</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 10 Aug 2011 10:01:23 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer: Vergleichen und Manipulieren (um Nachbarshaften festzustellen) on Wed, 10 Aug 2011 09:54:10 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Nochwas: du weisst schon, dass die Adresse der Elemente in einem Vektor sich ändern kann, wenn die grösse des Vektors sich ändert?</p>
<p>D.h. wenn du etwas in m_elementList einfügst, kann es sein, dass die Zeiger die ehemals auf Elemente in m_elementList gezeigt haben dann ins leere zeigen.</p>
</blockquote>
<p>Um noch mögliche Problemlösungen hinzuzufügen:<br />
- Die Größe des vectors direkt bei der Erstellung festlegen<br />
- Einen anderen Container, z.B. std::list verwenden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2104322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2104322</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Wed, 10 Aug 2011 09:54:10 GMT</pubDate></item></channel></rss>