<?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[Matrix, Array &amp;amp; Klasse]]></title><description><![CDATA[<p>Hallo zusammen, ich musste hier eine Matrixklasse erstellen in der m x n Matrizen definiert werden können und jeweils Funktionen für Addition Skalarmuliplikation und Matrizenmultiplikation und habe eigentlich alles fertig,</p>
<p>verstehe allerdings nicht wieso das Programm mir folgenden Error auswirft:<br />
&quot;*** Error in `./main': double free or corruption (fasttop): 0x0000000002114010 ***&quot;</p>
<p>Hier mal mein Code:</p>
<p>main.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;Matrix.h&quot;
using namespace std;

int main()
{
 char c;
 int m,n,l;
 cout &lt;&lt; &quot; Was möchten Sie machen? &quot; &lt;&lt; endl;
 cout &lt;&lt; &quot; a) Addition s) Skalar m) Multi &quot;  &lt;&lt; endl;
 cin &gt;&gt; c;
 switch(c){
   case 'a':{ cout &lt;&lt; &quot;Größe der Matrix eingeben: &quot; &lt;&lt; endl;
           cin &gt;&gt; m;
           cin &gt;&gt; n;
           matrix a(m,n);
           cout &lt;&lt; &quot;Größe der zweiten Matrix eingeben: &quot; &lt;&lt; endl;
           cin &gt;&gt; m;
           cin &gt;&gt; n;
           matrix b(m,n);
           if( a(m,n) != b(m,n)){return 0;}
           cout &lt;&lt; &quot; Werte für Matrix a eingeben: &quot; &lt;&lt; endl;
           a.einlesen(a);
           cout &lt;&lt; &quot; Werte für Matrix b eingeben: &quot; &lt;&lt; endl;
           b.einlesen(b);
           matrix c(m,n);
           c.add(a,b,c);
           c.output(c);
           }
   case 's':{double s=0;
             cout &lt;&lt; &quot; Größe der Matrix eingeben: &quot; &lt;&lt; endl;
             cin &gt;&gt; m;
             cin &gt;&gt; n;
             matrix a(m,n);
             matrix c(m,n);
             cout &lt;&lt; &quot; Größe des Skalar eingeben: &quot; &lt;&lt; endl;
             cin &gt;&gt; s;
             cout &lt;&lt; &quot; Werte für Matrix a eingeben: &quot; &lt;&lt; endl;
             c.einlesen(a);
             c.smult(s,a,c);
             c.output(a);
            }
   case 'm':{cout &lt;&lt; &quot;Größe der Matrix eingeben: &quot; &lt;&lt; endl;
           cin &gt;&gt; m;
           cin &gt;&gt; n;
           matrix a(m,n);
           cout &lt;&lt; &quot;Größe der zweiten Matrix eingeben: &quot; &lt;&lt; endl;
           cin &gt;&gt; n;
           cin &gt;&gt; l;
           matrix b(m,n);
           if( a(m,n) != b(n,l)){return 0;}
           cout &lt;&lt; &quot; Werte für Matrix a eingeben: &quot; &lt;&lt; endl;
           a.einlesen(a);
           cout &lt;&lt; &quot; Werte für Matrix b eingeben: &quot; &lt;&lt; endl;
           b.einlesen(b);
           matrix c(m,l);
           c.mmult(a,b,c);
           c.output(c);}
   default: {break;}

  }

}
</code></pre>
<p>Matrix.cpp</p>
<pre><code>#include &quot;Matrix.h&quot;
#include &lt;iostream&gt;
using namespace std;

matrix::matrix(int m,int n)
  : m(m),n(n),a(new double[n*m]) {};                           

matrix::~matrix(){delete [] a;}                                // Destruktor gibt Speicher wieder frei

void matrix::output(matrix a)
{
cout &lt;&lt; &quot;Ausgabe der Matrix:&quot; &lt;&lt; endl;

for (int i = 0; i&lt;m; i++)
    for (int j = 0; j&lt;n; j++){
        cout &lt;&lt; a(i,j) &lt;&lt; &quot;\t&quot;;
        if(j+1 == n) {cout&lt;&lt;&quot;\n&quot;&lt;&lt;endl;};}
;}

void matrix :: add (matrix a, matrix b, matrix c){

for (int i = 0; i&lt;=m; i++)
    for (int j = 0; j&lt;=n; j++)
        c (i,j) = a(i,j) + b(i,j)
;}

void matrix :: smult(double s, matrix a, matrix c){
for (int i = 0; i&lt;=m; i++)
    for (int j = 0; j&lt;=n; j++)
        c (i,j) = a(i,j) * s
;}

void matrix :: mmult(matrix a, matrix b, matrix c){

for(int i=0;i&lt;m;++i)
   for(int j=0;j&lt;b.n;++j)
       for(int k=0;k&lt;=n;++k)
            c(i,j) = c(i,j) + a(i,k)*b(k,j)
;}	

void matrix::einlesen(matrix a){

for(int i=0;i&lt;m;++i)
  {for(int j=0;j&lt;n;++j)
   {cin &gt;&gt; eingabe;
   eingabe = a(i,j);}}

}
</code></pre>
<p>Matrix.h</p>
<pre><code>#ifndef matrix_h
#define matrix_h
#define INDEX(i,j)((i)*n+(j))

class matrix{
public:
    matrix (int m,int n);
    ~matrix();

    double&amp; operator() (int i , int j) {return a[INDEX(i,j)];};  // Operatorüberladung

    void output(matrix);
    void add(matrix, matrix, matrix);
    void mmult(matrix, matrix,matrix);
    void smult(double , matrix , matrix );
    double eingabe;
    void einlesen(matrix);

private:
    double *a;
    int m,n;   

    };

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/330493/matrix-array-amp-klasse</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 06:12:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330493.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 13 Jan 2015 09:30:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 09:30:15 GMT]]></title><description><![CDATA[<p>Hallo zusammen, ich musste hier eine Matrixklasse erstellen in der m x n Matrizen definiert werden können und jeweils Funktionen für Addition Skalarmuliplikation und Matrizenmultiplikation und habe eigentlich alles fertig,</p>
<p>verstehe allerdings nicht wieso das Programm mir folgenden Error auswirft:<br />
&quot;*** Error in `./main': double free or corruption (fasttop): 0x0000000002114010 ***&quot;</p>
<p>Hier mal mein Code:</p>
<p>main.cpp</p>
<pre><code>#include &lt;iostream&gt;
#include &quot;Matrix.h&quot;
using namespace std;

int main()
{
 char c;
 int m,n,l;
 cout &lt;&lt; &quot; Was möchten Sie machen? &quot; &lt;&lt; endl;
 cout &lt;&lt; &quot; a) Addition s) Skalar m) Multi &quot;  &lt;&lt; endl;
 cin &gt;&gt; c;
 switch(c){
   case 'a':{ cout &lt;&lt; &quot;Größe der Matrix eingeben: &quot; &lt;&lt; endl;
           cin &gt;&gt; m;
           cin &gt;&gt; n;
           matrix a(m,n);
           cout &lt;&lt; &quot;Größe der zweiten Matrix eingeben: &quot; &lt;&lt; endl;
           cin &gt;&gt; m;
           cin &gt;&gt; n;
           matrix b(m,n);
           if( a(m,n) != b(m,n)){return 0;}
           cout &lt;&lt; &quot; Werte für Matrix a eingeben: &quot; &lt;&lt; endl;
           a.einlesen(a);
           cout &lt;&lt; &quot; Werte für Matrix b eingeben: &quot; &lt;&lt; endl;
           b.einlesen(b);
           matrix c(m,n);
           c.add(a,b,c);
           c.output(c);
           }
   case 's':{double s=0;
             cout &lt;&lt; &quot; Größe der Matrix eingeben: &quot; &lt;&lt; endl;
             cin &gt;&gt; m;
             cin &gt;&gt; n;
             matrix a(m,n);
             matrix c(m,n);
             cout &lt;&lt; &quot; Größe des Skalar eingeben: &quot; &lt;&lt; endl;
             cin &gt;&gt; s;
             cout &lt;&lt; &quot; Werte für Matrix a eingeben: &quot; &lt;&lt; endl;
             c.einlesen(a);
             c.smult(s,a,c);
             c.output(a);
            }
   case 'm':{cout &lt;&lt; &quot;Größe der Matrix eingeben: &quot; &lt;&lt; endl;
           cin &gt;&gt; m;
           cin &gt;&gt; n;
           matrix a(m,n);
           cout &lt;&lt; &quot;Größe der zweiten Matrix eingeben: &quot; &lt;&lt; endl;
           cin &gt;&gt; n;
           cin &gt;&gt; l;
           matrix b(m,n);
           if( a(m,n) != b(n,l)){return 0;}
           cout &lt;&lt; &quot; Werte für Matrix a eingeben: &quot; &lt;&lt; endl;
           a.einlesen(a);
           cout &lt;&lt; &quot; Werte für Matrix b eingeben: &quot; &lt;&lt; endl;
           b.einlesen(b);
           matrix c(m,l);
           c.mmult(a,b,c);
           c.output(c);}
   default: {break;}

  }

}
</code></pre>
<p>Matrix.cpp</p>
<pre><code>#include &quot;Matrix.h&quot;
#include &lt;iostream&gt;
using namespace std;

matrix::matrix(int m,int n)
  : m(m),n(n),a(new double[n*m]) {};                           

matrix::~matrix(){delete [] a;}                                // Destruktor gibt Speicher wieder frei

void matrix::output(matrix a)
{
cout &lt;&lt; &quot;Ausgabe der Matrix:&quot; &lt;&lt; endl;

for (int i = 0; i&lt;m; i++)
    for (int j = 0; j&lt;n; j++){
        cout &lt;&lt; a(i,j) &lt;&lt; &quot;\t&quot;;
        if(j+1 == n) {cout&lt;&lt;&quot;\n&quot;&lt;&lt;endl;};}
;}

void matrix :: add (matrix a, matrix b, matrix c){

for (int i = 0; i&lt;=m; i++)
    for (int j = 0; j&lt;=n; j++)
        c (i,j) = a(i,j) + b(i,j)
;}

void matrix :: smult(double s, matrix a, matrix c){
for (int i = 0; i&lt;=m; i++)
    for (int j = 0; j&lt;=n; j++)
        c (i,j) = a(i,j) * s
;}

void matrix :: mmult(matrix a, matrix b, matrix c){

for(int i=0;i&lt;m;++i)
   for(int j=0;j&lt;b.n;++j)
       for(int k=0;k&lt;=n;++k)
            c(i,j) = c(i,j) + a(i,k)*b(k,j)
;}	

void matrix::einlesen(matrix a){

for(int i=0;i&lt;m;++i)
  {for(int j=0;j&lt;n;++j)
   {cin &gt;&gt; eingabe;
   eingabe = a(i,j);}}

}
</code></pre>
<p>Matrix.h</p>
<pre><code>#ifndef matrix_h
#define matrix_h
#define INDEX(i,j)((i)*n+(j))

class matrix{
public:
    matrix (int m,int n);
    ~matrix();

    double&amp; operator() (int i , int j) {return a[INDEX(i,j)];};  // Operatorüberladung

    void output(matrix);
    void add(matrix, matrix, matrix);
    void mmult(matrix, matrix,matrix);
    void smult(double , matrix , matrix );
    double eingabe;
    void einlesen(matrix);

private:
    double *a;
    int m,n;   

    };

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2437276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437276</guid><dc:creator><![CDATA[huwul]]></dc:creator><pubDate>Tue, 13 Jan 2015 09:30:15 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 09:35:36 GMT]]></title><description><![CDATA[<p>Hä??</p>
<p>Kam nicht exakt der Quellcode vorn paar Tagen schonmal hier rum??</p>
<p>Zum Fehler: Regel der großen 3 verletzt.<br />
Was die Rule-Of-Three ist, kannst googlen :&gt;</p>
<p>Edit: Jo <a href="https://www.c-plusplus.net/forum/330430">hier</a>!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437278</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437278</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Tue, 13 Jan 2015 09:35:36 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 09:49:55 GMT]]></title><description><![CDATA[<p>okay verstehe ich soweit,</p>
<pre><code>matrix (int m,int n);
    matrix(matrix const&amp;){}
    ~matrix();
</code></pre>
<p>nur was genau gehört in den Kopierkonstruktor dann hinein ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437286</guid><dc:creator><![CDATA[huwul]]></dc:creator><pubDate>Tue, 13 Jan 2015 09:49:55 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 09:55:33 GMT]]></title><description><![CDATA[<p><a href="http://www.learncpp.com/cpp-tutorial/912-shallow-vs-deep-copying/" rel="nofollow">http://www.learncpp.com/cpp-tutorial/912-shallow-vs-deep-copying/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437287</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 13 Jan 2015 09:55:33 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 10:23:55 GMT]]></title><description><![CDATA[<p>Hm ich kapiere wofür ich den Kopierkonstruktor brauche und dass ich damit irgendwie die m &amp; n werte kopieren muss bzw auch das double Array, aber wie ich das genau mache entzieht sich gänzlich meiner Kenntnis...</p>
<p>( Tut mir leid, haben gerade erst mit Klassen angefangen )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437293</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437293</guid><dc:creator><![CDATA[huwul]]></dc:creator><pubDate>Tue, 13 Jan 2015 10:23:55 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 10:39:17 GMT]]></title><description><![CDATA[<p>huwul schrieb:</p>
<blockquote>
<p>Hm ich kapiere wofür ich den Kopierkonstruktor brauche und dass ich damit irgendwie die m &amp; n werte kopieren muss bzw auch das double Array, aber wie ich das genau mache entzieht sich gänzlich meiner Kenntnis...</p>
<p>( Tut mir leid, haben gerade erst mit Klassen angefangen )</p>
</blockquote>
<p>Unter dem von Swordfish geposteten Link ist das doch genau beschrieben. Was willst du noch? Soll dir jemand den Popo abwischen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437296</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437296</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 13 Jan 2015 10:39:17 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 10:44:20 GMT]]></title><description><![CDATA[<p>btw schau dir mal die Zeile 48 der <code>Matrix.cpp</code> oben an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437300</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 13 Jan 2015 10:44:20 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 12:39:10 GMT]]></title><description><![CDATA[<p>Die Main ist schon ausgebessert.</p>
<p>Aber als copy Konstruktor müsste doch völlig reichen:</p>
<pre><code>Matrix (const Matrix&amp; rhs){m = New; n=New;}
</code></pre>
<p>Mit diesen Werten muss eine neu Erstellung der Matrix doch möglich sei ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437321</guid><dc:creator><![CDATA[huwul]]></dc:creator><pubDate>Tue, 13 Jan 2015 12:39:10 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 12:47:23 GMT]]></title><description><![CDATA[<p>huwul schrieb:</p>
<blockquote>
<p>Die Main ist schon ausgebessert.</p>
<p>Aber als copy Konstruktor müsste doch völlig reichen:</p>
<pre><code>Matrix (const Matrix&amp; rhs){m = New; n=New;}
</code></pre>
<p>Mit diesen Werten muss eine neu Erstellung der Matrix doch möglich sei ...</p>
</blockquote>
<p>Das wird ja noch nicht einmal übersetzt.</p>
<p>Hoffst du darauf, dass dir jemand den Code schreibt, wenn du dich nur dumm genug anstellst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437323</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 13 Jan 2015 12:47:23 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 12:50:44 GMT]]></title><description><![CDATA[<p>huwul schrieb:</p>
<blockquote>
<p>Die Main ist schon ausgebessert.</p>
</blockquote>
<p>Swordfish schrieb:</p>
<blockquote>
<p>btw schau dir mal die Zeile 48 der <strong>Matrix.cpp</strong> oben an.</p>
</blockquote>
<p>huwul schrieb:</p>
<blockquote>
<p>Aber als copy Konstruktor müsste doch völlig reichen:</p>
<pre><code class="language-cpp">Matrix (const Matrix&amp; rhs){m = New; n=New;}
</code></pre>
</blockquote>
<p>Was soll &quot;New&quot; sein?</p>
<p>huwul schrieb:</p>
<blockquote>
<p>Mit diesen Werten muss eine neu Erstellung der Matrix doch möglich sei ...</p>
</blockquote>
<p>Wer soll denn diese &quot;Neuerstellung&quot; machen??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437324</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 13 Jan 2015 12:50:44 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 13:08:10 GMT]]></title><description><![CDATA[<p>Ja habe das korrigiert nur nicht wieder gelistet.<br />
Das sollte klein geschrieben sein und es soll einen neuen integer erstellen wenn eine zweite Instanz erstellt wird in der Main mit den neu ej gegebenen werten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437328</guid><dc:creator><![CDATA[huwul]]></dc:creator><pubDate>Tue, 13 Jan 2015 13:08:10 GMT</pubDate></item><item><title><![CDATA[Reply to Matrix, Array &amp;amp; Klasse on Tue, 13 Jan 2015 14:12:35 GMT]]></title><description><![CDATA[<p>huwul schrieb:</p>
<blockquote>
<p>[...] wenn eine zweite Instanz erstellt wird in der Main mit den neu eingegebenen werten</p>
</blockquote>
<p>Der Kopierkonstruktor wird aufgerufen, wenn du eine matrix an eine deiner Funktionen übergibst.</p>
<p>An deinem Code oben ist sooo viel falsch ... was macht denn</p>
<pre><code class="language-cpp">if( a(m,n) != b(m,n)){return 0;}
</code></pre>
<p>!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2437344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2437344</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Tue, 13 Jan 2015 14:12:35 GMT</pubDate></item></channel></rss>