<?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 Funktionen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche mich gerade an einer eigentlich simplen Funktion die die Differenz von zwei Arrays im Sinne der Subtraktion von Mengen realisiert. Dabei habe ich ein paar Probleme mit Pointer als Rückgabeargument von Funktionen. Zum einen, verstehe ich folgendes nicht:</p>
<pre><code>// test.cpp
// Dev-C++ 4.992 under winXP

void somefunc(){
     int* ip;
     *ip = 5; //error! warum? Zuordnung mit new?
}

int main()
{
    somefunc();
     int* ip;
     *ip = 5; //geht manchmal! warum?
}
</code></pre>
<p>Zum anderen weiß ich nicht wie ich die Rückgabe machen soll. Hier die ganze Funktion:</p>
<pre><code>int* minarray(int* array, int* minus, int sizea, int sizeb){
     // vectoren aus arrays erstellen
     vector&lt;int&gt; a;
     for (int i = 0; i &lt; sizea; i++) {
         a.push_back(array[i]);
     }

     vector&lt;int&gt; b;
     for (int i = 0; i &lt; sizeb; i++) {
         b.push_back(minus[i]);
     }

     vector&lt;int&gt;::iterator Iter, result;

     vector&lt;int&gt; intersect;

     // Differenz bilden
     for (Iter = b.begin();Iter != b.end(); Iter++) {
         result = find(a.begin(), a.end(), *Iter);  
         if (result != a.end()) {
            intersect.push_back(*result);
         }
     }

     // neues array erstellen
     int* newarr = new int[a.size()];
     int count = 0;
     for (Iter = intersect.begin();Iter != intersect.end(); Iter++){
         newarr[count] = *Iter;
         //printf(&quot;i: %i %i\n&quot;, count, newarr[count]);
         count++;
     }  

     return newarr;
}
</code></pre>
<p>Bei der Rückgabe bekomme ich nicht die richtige Größe des Arrays:</p>
<pre><code>int a[] = {1, 14, 44, 89};
    int b[] = {14, 44, 17};
    int* c = minarray(a, b, 4, 2);
    int length = sizeof(c)/sizeof(*c);
    printf(&quot;length: %i\n&quot;, length);
    for (int i = 0; i &lt; 12; i+=sizeof(*c)) {
        printf(&quot;%i\n&quot;, c[i]);    
    }
    //output
    //14
    //197121
    //2609
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/188633/pointer-und-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 03:18:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188633.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Aug 2007 13:44:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer und Funktionen on Thu, 02 Aug 2007 13:44:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche mich gerade an einer eigentlich simplen Funktion die die Differenz von zwei Arrays im Sinne der Subtraktion von Mengen realisiert. Dabei habe ich ein paar Probleme mit Pointer als Rückgabeargument von Funktionen. Zum einen, verstehe ich folgendes nicht:</p>
<pre><code>// test.cpp
// Dev-C++ 4.992 under winXP

void somefunc(){
     int* ip;
     *ip = 5; //error! warum? Zuordnung mit new?
}

int main()
{
    somefunc();
     int* ip;
     *ip = 5; //geht manchmal! warum?
}
</code></pre>
<p>Zum anderen weiß ich nicht wie ich die Rückgabe machen soll. Hier die ganze Funktion:</p>
<pre><code>int* minarray(int* array, int* minus, int sizea, int sizeb){
     // vectoren aus arrays erstellen
     vector&lt;int&gt; a;
     for (int i = 0; i &lt; sizea; i++) {
         a.push_back(array[i]);
     }

     vector&lt;int&gt; b;
     for (int i = 0; i &lt; sizeb; i++) {
         b.push_back(minus[i]);
     }

     vector&lt;int&gt;::iterator Iter, result;

     vector&lt;int&gt; intersect;

     // Differenz bilden
     for (Iter = b.begin();Iter != b.end(); Iter++) {
         result = find(a.begin(), a.end(), *Iter);  
         if (result != a.end()) {
            intersect.push_back(*result);
         }
     }

     // neues array erstellen
     int* newarr = new int[a.size()];
     int count = 0;
     for (Iter = intersect.begin();Iter != intersect.end(); Iter++){
         newarr[count] = *Iter;
         //printf(&quot;i: %i %i\n&quot;, count, newarr[count]);
         count++;
     }  

     return newarr;
}
</code></pre>
<p>Bei der Rückgabe bekomme ich nicht die richtige Größe des Arrays:</p>
<pre><code>int a[] = {1, 14, 44, 89};
    int b[] = {14, 44, 17};
    int* c = minarray(a, b, 4, 2);
    int length = sizeof(c)/sizeof(*c);
    printf(&quot;length: %i\n&quot;, length);
    for (int i = 0; i &lt; 12; i+=sizeof(*c)) {
        printf(&quot;%i\n&quot;, c[i]);    
    }
    //output
    //14
    //197121
    //2609
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1337332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337332</guid><dc:creator><![CDATA[gecko]]></dc:creator><pubDate>Thu, 02 Aug 2007 13:44:16 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer und Funktionen on Thu, 02 Aug 2007 14:19:05 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<ol>
<li></li>
</ol>
<p>In beiden Fällen oben wurde für ip kein Speicher vereinbart. Deswegen erzeugt eine Dereferenzierung dort undefiniertes Verhalten. Du könntest da z.Bsp. mit new Speicher anfordern.</p>
<ol start="2">
<li></li>
</ol>
<p>Du kannst bei einem dynamisch erzeugten Array im Nachhinein nicht herausbekommen wie groß es ist.<br />
Das hier</p>
<pre><code class="language-cpp">int length = sizeof(c)/sizeof(*c);
</code></pre>
<p>funktioniert also nicht. Du müsstest die Länge mit zurückgeben oder du gibst hier gleich den Vektor zurück.<br />
Ansonsten müsste das hier</p>
<pre><code class="language-cpp">int* newarr = new int[a.size()];
</code></pre>
<p>auch eher so aussehen</p>
<pre><code class="language-cpp">int* newarr = new int[intersect.size()];
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1337376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1337376</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 02 Aug 2007 14:19:05 GMT</pubDate></item></channel></rss>