<?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 verändert sich ohne Grund ?]]></title><description><![CDATA[<p>Hallo,<br />
ich bin am verzweifeln...mein vektor verändert zwei seiner werte - und ich verstehe einfach nicht warum...leider ist der code etwas grösser und der aufruf von fortran bibliotheksfunktionen machts schwerer...<br />
Hier mein code mit kommentaren von mir:</p>
<pre><code class="language-cpp">//Dies ist der vector der sich verändert
std::vector&lt; double &gt;            M;

//Aufruf einer Insert funktion siehe unten
//p_col = [1,0,0,1] z.B und e_k_hat = [4,3,0,0] als Beispiel
Insert(M, p_col, e_k_hat);

//Hier hat M jetzt einträge
//Es folgt ein Aufruf einer Fortran Funktion
fortranf_                     (SIDE,
                                   TRANS,
                                    &amp;m,
                                    &amp;n,
                                    &amp;k,
                                    &amp;A_hat[0],
                                    &amp;lda,
                                    &amp;tau[0],
                                    &amp;e_k_hat[0],
                                    &amp;lda,
                                    &amp;work[0],
                                    &amp;lwork,
                                    &amp;info);

und hier hat  M ein paar werte anders...

//Kopierfunktion:
void 
MyClass::Insert(std::vector&lt; double &gt;&amp; M, 
                     const std::vector&lt; double &gt;&amp; p_col,
                     const std::vector&lt; double &gt;&amp; e_k_hat)
{
    std::vector&lt; double &gt;::const_iterator el = e_k_hat.begin(); 
    for( std::vector&lt; double &gt;::const_iterator i = p_col.begin(); 
         i != p_col.end(); 
         ++i ) 
    { 
        if( *i != 0.0 )
            M.push_back(*el++);  
        else 
            M.push_back(0.0);   
    } 
}
</code></pre>
<p>ich sehe den fehler nicht...<br />
der aufruf der fortranfunktion kann doch M nicht verändern weil ich doch M gar nicht übergebe?<br />
Ich steh total auf dem schlauch....</p>
<p>Wichtig ist:<br />
Die fortran funktion operiert auf dem e_k_hat und verändert es.<br />
Kann das was mit dem Kopieren in der insert funktion zu tun haben und im nachhinein wird dann e_k_hat verändert und damit auch M? Ich kann mir das nicht erklären...</p>
<p>Hier noch die veränderung:</p>
<pre><code>0.0549
0
0
0.3244

wird zu
0.0523
0.1607
0
0.3244
</code></pre>
<p>Danke euch!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/160814/vector-verändert-sich-ohne-grund</link><generator>RSS for Node</generator><lastBuildDate>Fri, 11 Sep 2026 16:51:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/160814.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 29 Sep 2006 16:51:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vector verändert sich ohne Grund ? on Fri, 29 Sep 2006 16:51:41 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich bin am verzweifeln...mein vektor verändert zwei seiner werte - und ich verstehe einfach nicht warum...leider ist der code etwas grösser und der aufruf von fortran bibliotheksfunktionen machts schwerer...<br />
Hier mein code mit kommentaren von mir:</p>
<pre><code class="language-cpp">//Dies ist der vector der sich verändert
std::vector&lt; double &gt;            M;

//Aufruf einer Insert funktion siehe unten
//p_col = [1,0,0,1] z.B und e_k_hat = [4,3,0,0] als Beispiel
Insert(M, p_col, e_k_hat);

//Hier hat M jetzt einträge
//Es folgt ein Aufruf einer Fortran Funktion
fortranf_                     (SIDE,
                                   TRANS,
                                    &amp;m,
                                    &amp;n,
                                    &amp;k,
                                    &amp;A_hat[0],
                                    &amp;lda,
                                    &amp;tau[0],
                                    &amp;e_k_hat[0],
                                    &amp;lda,
                                    &amp;work[0],
                                    &amp;lwork,
                                    &amp;info);

und hier hat  M ein paar werte anders...

//Kopierfunktion:
void 
MyClass::Insert(std::vector&lt; double &gt;&amp; M, 
                     const std::vector&lt; double &gt;&amp; p_col,
                     const std::vector&lt; double &gt;&amp; e_k_hat)
{
    std::vector&lt; double &gt;::const_iterator el = e_k_hat.begin(); 
    for( std::vector&lt; double &gt;::const_iterator i = p_col.begin(); 
         i != p_col.end(); 
         ++i ) 
    { 
        if( *i != 0.0 )
            M.push_back(*el++);  
        else 
            M.push_back(0.0);   
    } 
}
</code></pre>
<p>ich sehe den fehler nicht...<br />
der aufruf der fortranfunktion kann doch M nicht verändern weil ich doch M gar nicht übergebe?<br />
Ich steh total auf dem schlauch....</p>
<p>Wichtig ist:<br />
Die fortran funktion operiert auf dem e_k_hat und verändert es.<br />
Kann das was mit dem Kopieren in der insert funktion zu tun haben und im nachhinein wird dann e_k_hat verändert und damit auch M? Ich kann mir das nicht erklären...</p>
<p>Hier noch die veränderung:</p>
<pre><code>0.0549
0
0
0.3244

wird zu
0.0523
0.1607
0
0.3244
</code></pre>
<p>Danke euch!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146681</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146681</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Fri, 29 Sep 2006 16:51:41 GMT</pubDate></item><item><title><![CDATA[Reply to Vector verändert sich ohne Grund ? on Fri, 29 Sep 2006 16:56:20 GMT]]></title><description><![CDATA[<p>Kann es sein, dass in deiner Fortranfunktion irgendwo ein Speicherüberlauf stattfindet und som im Speicher deines vectors rumgefuscht wird? Was passiert denn, wenn du fortranf_ auskommentierst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146684</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 29 Sep 2006 16:56:20 GMT</pubDate></item><item><title><![CDATA[Reply to Vector verändert sich ohne Grund ? on Fri, 29 Sep 2006 17:05:15 GMT]]></title><description><![CDATA[<p>wenn ich fortranf_ auskommentiere dann klappt es - das mit dem überlauf ist ne gute idee....zumal ich das nur bei einem lauf das bisher beobachtet habe....wenn ich die ausgangsfunktion mit was anderem aufrufe klappts ....aber bei einem speziellen aufruf wird M immer an den zwei stellen verändert....</p>
<p>Aber das wäre ja nicht so toll...kann ich so einem Überlauf entgegenwirken? Wüsste jetzt nicht wie...die fortranf_ funktion ist nicht von mir...ich kann sie also nicht beeinflussen...</p>
<p>edit:<br />
es ist so: die fortranf_ funktion wird in ner schleife mehrmals aufgerufen und das M wächst von iteration zu iteration. Erst beim zweiten aufruf also bei der 2ten iteration verändern sich plötzlich die ersten beiden werte die in erster iteration geschrieben wurden...danach also in den nachfolgenden iterationen ist immer alles ok also das &quot;phänomen&quot; taucht nur bei erster iteration mit nur einer eingabe (bisher) auf...</p>
<p>*grmpf</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146685</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146685</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Fri, 29 Sep 2006 17:05:15 GMT</pubDate></item><item><title><![CDATA[Reply to Vector verändert sich ohne Grund ? on Fri, 29 Sep 2006 17:13:46 GMT]]></title><description><![CDATA[<p>Kannst du nicht eine Biblothek bzw. ein Programm verwenden, welches dir Speicherüberläufe anzeigt (bei meinem BCB CodeGuard, memproof etc.)? Dann wüßtest du es wenigstens genau und kannst dich an den verfasser der Fortranfunktion wenden.<br />
Du kannst ja mal versuchen, vor Aufruf der Fortranfunktion neuen Speicher zu allozieren un danach wieder freizugenben. Mit etwas Glück wird dann nur in diesem Dummy-Speicherbereich was geändert. Eigentlich sollte ich sowas gar nicht empfehlen. <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="🙂"
    /><br />
Man könnte auch die fortran-Funktion einfach in C++ neu schreiben. <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/1146694</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146694</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 29 Sep 2006 17:13:46 GMT</pubDate></item><item><title><![CDATA[Reply to Vector verändert sich ohne Grund ? on Fri, 29 Sep 2006 17:25:30 GMT]]></title><description><![CDATA[<p>danke für die Hilfe...<br />
leider hat folgendes nix gebracht:</p>
<pre><code class="language-cpp">double* dummy = (double*)calloc(100000,sizeof(double));

        fortranf_                     (SIDE,
                                     TRANS,
                                     &amp;m,
                                     &amp;n,
                                     &amp;k,
                                     &amp;A_hat[0],
                                     &amp;lda,
                                     &amp;tau[0],
                                     &amp;e_k_hat[0],
                                     &amp;lda,
                                     &amp;work[0],
                                     &amp;lwork,
                                     &amp;info);
        free(dummy);
</code></pre>
<p>Naja die fortran funktion in c++ schreiben...leider brauche ich es ultra-effizient....die bibliotheksfunktion gilt als die schnellste <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="🙂"
    /> ich glaub net dass ich das besser hinkriegen würde...</p>
<p>Ich schau mich mal nach speicherüberlauf programmen um für linux...</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146700</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146700</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Fri, 29 Sep 2006 17:25:30 GMT</pubDate></item><item><title><![CDATA[Reply to Vector verändert sich ohne Grund ? on Fri, 29 Sep 2006 17:53:17 GMT]]></title><description><![CDATA[<p>Wenn du die Fortran-Funktion 1:1 in C++ umsetzt sollte sie fast genauso schnell sein. Es kommt hier ja eher auf den Algorithmus und weniger auf den Compiler an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146715</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 29 Sep 2006 17:53:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vector verändert sich ohne Grund ? on Fri, 29 Sep 2006 18:27:20 GMT]]></title><description><![CDATA[<p>hmm ja.....<br />
naja...das wäre wohl extrem umfangreich da die funktion weitere funktionen aufruft...</p>
<p>Edit:<br />
Hmm habe folgendes gemacht und M ändert den wert nicht mehr....ist das ein beweis dass ein speicherüberlauf stattfindet?</p>
<p>einfach ganz am anfang eingefügt:</p>
<pre><code class="language-cpp">for(int t = 0; t &lt; 100; t++)
        M.push_back(t);
    M.clear();
</code></pre>
<p>so passt es und der fortran aufruf ändert das M nimmer ab....</p>
<p>Nur so nebenbei: Kann es nicht sein dass ich schuld bin? Ich meine vielleicht sollte ich das M anders konstruieren... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146723</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146723</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Fri, 29 Sep 2006 18:27:20 GMT</pubDate></item><item><title><![CDATA[Reply to Vector verändert sich ohne Grund ? on Sat, 30 Sep 2006 07:01:53 GMT]]></title><description><![CDATA[<p>Mati schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">...
Insert(M, p_col, e_k_hat);
...
</code></pre>
<p>Danke euch!</p>
</blockquote>
<p>Hi,</p>
<p>magst Du mal zeigen, wie Du p_col und e_k_hat definierst und füllst ?<br />
Außerdem fällt mir auf, dass Du hier</p>
<pre><code class="language-cpp">...    
    std::vector&lt; double &gt;::const_iterator el = e_k_hat.begin();
    for( std::vector&lt; double &gt;::const_iterator i = p_col.begin(); i != p_col.end(); ++i ) {
        if( *i != 0.0 )
            M.push_back(*el++);  
        else
            M.push_back(0.0);  
    }
</code></pre>
<p>durch e_k_hat iterierst, ohne sicherzustellen, dass Du nicht über sein Ende hinweg liest (sollte zwar nicht so schlimm sein, ist aber trotzdem unsicher).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1146858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1146858</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 30 Sep 2006 07:01:53 GMT</pubDate></item><item><title><![CDATA[Reply to Vector verändert sich ohne Grund ? on Sun, 01 Oct 2006 19:24:15 GMT]]></title><description><![CDATA[<p>Danke Simon,</p>
<p>ich erstelle die vektoren so:</p>
<pre><code class="language-cpp">const int dimension = ...;

std::vector&lt; double &gt;   e_k_hat,
                                     p_col(dimension);
</code></pre>
<p>gefüllt werden sie so:</p>
<pre><code class="language-cpp">void
Class::Create_e_k(const int col, 
                 const int dimension, 
                 std::vector&lt; double &gt;&amp; e_k_hat)
{
    e_k_hat.clear();
    e_k_hat.resize(dimension, 0.0);
    e_k_hat[col] = 1.0;
}

//und p_col

void
Class::Get_Pattern_Column(std::vector&lt; double &gt;&amp; p_col, 
                         const std::vector&lt; double &gt;&amp; P, 
                         const int col, 
                         const int dimension)
{
    p_col.clear();
    p_col.insert(p_col.begin(), 
                 P.begin() + dimension * col, 
                 P.begin() + dimension * ( col + 1 ));
}
</code></pre>
<p>danke - du hast so natürlich recht mit dem drüber hinaus lesen...<br />
man muss natürlich wissen dass e_k_hat nie grösser sein kann als p_col...ist in meinem Algorithmus so...<br />
aber vielleicht gibt es eine elegantere lösung ??<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<p>Danke für Ratschläge....</p>
<p>Ist meine Annahme richtig dass mit den drei zeilen mit speicher alloziieren dann ein speicherüberlauf statt findet in der fortran - funktion?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1147596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1147596</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Sun, 01 Oct 2006 19:24:15 GMT</pubDate></item><item><title><![CDATA[Reply to Vector verändert sich ohne Grund ? on Mon, 02 Oct 2006 09:01:14 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>also ich sehe da so erstmal nichts Falsches. Allerdings ist mir Dein Umgang mit den Vektoren ein wenig ungewohnt - gerade so das &quot;resizen&quot; und das Hin- und Herkopieren von Teilvektoren. Aber das entspringt nur meinem persönlichen Geschmack. Das heißt nicht, dass es irgendwie falsch/schlecht/unsicher wäre.</p>
<p>Liegt wohl doch eher in der Fortranfunktion.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1147782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1147782</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 02 Oct 2006 09:01:14 GMT</pubDate></item><item><title><![CDATA[Reply to Vector verändert sich ohne Grund ? on Mon, 02 Oct 2006 19:49:00 GMT]]></title><description><![CDATA[<p>danke für die Antwort....</p>
<p>im moment weiß ich nicht wie ich vorgehen soll zwecks dem speicherüberlauf bzw. obs überhaupt einer is...</p>
<p>nur so interessenhalber zwecks den vektoren und dem resizen...<br />
wie würdest du/ihr das denn so machen....<br />
ich lese immer nur code-reuse zwecks STL etc...</p>
<p>Und so gehts halt bequem -</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1148333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1148333</guid><dc:creator><![CDATA[Mati]]></dc:creator><pubDate>Mon, 02 Oct 2006 19:49:00 GMT</pubDate></item></channel></rss>