<?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[vector-klasse -&amp;gt; problem mit call-by-reference]]></title><description><![CDATA[<p>Hi, ich ein Problem mit der Uebergabe eines Vektors per Referenz.<br />
Urspruenglich habe ich den Code unter Linux geschrieben und ihn heute auf Windows per MinGW portiert.<br />
Dabei musste ich feststellen, dass sich der portierte Code unter Wine beim Aufruf der push_back-Funktion des per Referenz uebergeben Vektors einfach aufhaengt.<br />
Merkwuerdigerweise funktioniert der selbe Code unter Linux einwanfrei.<br />
Gibt es prinzipielle Unterschiede bei der Implementierung bzw. im Verhalten der C++-Vektorklasse unter Windows und Linux?</p>
<p>Hier ein kurzes Beispiel:</p>
<pre><code>void to_vect(Object *target,vector&lt;Object&gt; *target_obj)
{
    target-&gt;name = &quot;test;
    target_obj-&gt;push_back(*target);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/240221/vector-klasse-gt-problem-mit-call-by-reference</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 01:52:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240221.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 03 May 2009 19:19:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to vector-klasse -&amp;gt; problem mit call-by-reference on Sun, 03 May 2009 19:19:13 GMT]]></title><description><![CDATA[<p>Hi, ich ein Problem mit der Uebergabe eines Vektors per Referenz.<br />
Urspruenglich habe ich den Code unter Linux geschrieben und ihn heute auf Windows per MinGW portiert.<br />
Dabei musste ich feststellen, dass sich der portierte Code unter Wine beim Aufruf der push_back-Funktion des per Referenz uebergeben Vektors einfach aufhaengt.<br />
Merkwuerdigerweise funktioniert der selbe Code unter Linux einwanfrei.<br />
Gibt es prinzipielle Unterschiede bei der Implementierung bzw. im Verhalten der C++-Vektorklasse unter Windows und Linux?</p>
<p>Hier ein kurzes Beispiel:</p>
<pre><code>void to_vect(Object *target,vector&lt;Object&gt; *target_obj)
{
    target-&gt;name = &quot;test;
    target_obj-&gt;push_back(*target);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1704963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704963</guid><dc:creator><![CDATA[porter]]></dc:creator><pubDate>Sun, 03 May 2009 19:19:13 GMT</pubDate></item><item><title><![CDATA[Reply to vector-klasse -&amp;gt; problem mit call-by-reference on Sun, 03 May 2009 19:26:06 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-1819.html" rel="nofollow">rüdiger</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-5.html" rel="nofollow">Linux/Unix</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704969</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sun, 03 May 2009 19:26:06 GMT</pubDate></item><item><title><![CDATA[Reply to vector-klasse -&amp;gt; problem mit call-by-reference on Sun, 03 May 2009 20:26:20 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>prinzipiell sollten die Implementierungen von std::vector auf Windows und Linux funktional identisch sein. Ich würde eher auf einen Fehler im Handlung der Objekte (Zeiger auf ungültiges Objekt?) tippen.<br />
So wäre es sehr spannend, zu wissen, wie &quot;Object&quot; implementiert ist.<br />
wenn Object::name z.B. ein char* ist, macht dieses Anweisung</p>
<p>porter schrieb:</p>
<blockquote>
<p>...</p>
<pre><code>...
    target-&gt;name = &quot;test;
...
</code></pre>
</blockquote>
<p>schonmal nicht das, was vermutlich von ihr erwartet wird.</p>
<p>Gruß,</p>
<p>Simon2.</p>
<p>P.S.: Die cpp-Tags (statt der &quot;code&quot;) machen das Lesen Deines Codes für uns leichter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705003</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705003</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sun, 03 May 2009 20:26:20 GMT</pubDate></item><item><title><![CDATA[Reply to vector-klasse -&amp;gt; problem mit call-by-reference on Sun, 03 May 2009 21:15:03 GMT]]></title><description><![CDATA[<p>Also</p>
<pre><code class="language-cpp">target-&gt;name
</code></pre>
<p>ist ein String.</p>
<p>Ganz vereinfacht waere es also:</p>
<pre><code class="language-cpp">class Object{

public:
     Object();
     ~Object();
     string name;
     [...]
};
</code></pre>
<p>Ich uebergebe also z.B.</p>
<pre><code class="language-cpp">std::vector&lt;Object&gt; o_vect;
Object *obj = new Object();
to_vect(obj,&amp;o_vect);
</code></pre>
<p>Die Vermutung mit der fehlerhaften Zeigerbehandlung hatte ich auch schon, allerdings laeuft es ja unter Linux wie gesagt ohne Probleme und das Objekt existiert auch.<br />
Mir waere es ja nicht mal aufgefallen, wenn ich es nicht mit der Win32-Version des g++ kompiliert haette.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705034</guid><dc:creator><![CDATA[porter]]></dc:creator><pubDate>Sun, 03 May 2009 21:15:03 GMT</pubDate></item><item><title><![CDATA[Reply to vector-klasse -&amp;gt; problem mit call-by-reference on Mon, 04 May 2009 09:24:56 GMT]]></title><description><![CDATA[<p>porter schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">class Object{

public:
     string name;
...
</code></pre>
</blockquote>
<p>Also dann ist das Problem nicht das von mir vermutete.</p>
<p>porter schrieb:</p>
<blockquote>
<p>...<br />
...<br />
Die Vermutung mit der fehlerhaften Zeigerbehandlung hatte ich auch schon, allerdings laeuft es ja unter Linux wie gesagt ohne Probleme und das Objekt existiert auch....</p>
</blockquote>
<p>Dass das Programm unter bestimmten Umständen das Erwartete macht, ist leider bei C++ kein ausreichender Beleg dafür, dass es &quot;korrekt&quot; ist ... auch nicht bzgl. der Existenz eines Objekts. Gerade mit &quot;ungültigen Zugriffen&quot; kann man eine Menge &quot;Spaß&quot; mit scheinbar funktionierenden Programmen haben.</p>
<p>An Deinem Code sieht erstmal nichts falsch aus. Aber mich überascht eigentlich die Verwendung von Zeigern in dem Beispiel. Erwartet hätte ich es eher &quot;anders herum&quot;:<br />
- entweder alles mit &quot;Autoobjekten&quot; (also ohne new)<br />
- oder die Ablage im Vektor per Zeiger (damit man Polymorphie nutzen kann).</p>
<p>Aber die dynamsiche Erzeugung(new), Übergabe per Zeiger und dann Ablage &quot;by value&quot; empfinde ich als unüblich.<br />
Kann natürlich rotzdem richtig und notwendig sein im konkreten Fall, birgt aber gewisse Klippen, die es zu umschiffen gilt. z.B.:<br />
- Im vector kann &quot;slicing&quot; auftreten, wenn man Polymorphie einsetzt (man hat ein &quot;Derived&quot; erzeugt, legt aber nur den &quot;Base&quot;-Teil ab),<br />
- wo immer ein &quot;new&quot; steht, lauern memory leaks, double deletes, Zugriffe auf ungültige Objekte, ....<br />
- ...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705163</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705163</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 04 May 2009 09:24:56 GMT</pubDate></item></channel></rss>