<?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[Segmentation fault]]></title><description><![CDATA[<p>Hallo zusammen!<br />
Ich arbeite seid ca. 3 Monaten mit C++ und es klappt eigentlich auch schon ganz gut, aber jetzt bin ich an meine Grenzen gestossen. Es geht um flogendes Teilprogramm:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;
#include &lt;math.h&gt;
#include&quot;bamatrix.h&quot;

int build(Matrix&lt;int&gt;*&amp; v, Matrix&lt;int&gt; Cluster, Matrix&lt;int&gt; Coordinates, int index) //hier wundert mich schon, dass ich &quot;Matrix&lt;int&gt;*&amp; v&quot; und nicht &quot;Matrix&lt;int&gt;* v&quot; uebergeben muss - aber das ist nicht das Problem :)
{

int sumclustersize = 0;
Matrix&lt;int&gt; matrix;

Matrix&lt;int&gt;* ve = (Matrix&lt;int&gt;*)malloc(index*sizeof(Matrix&lt;int&gt;));

for(int t = 0; t &lt; index; t++)
{
int j = 0;
for(int i = sumclustersize; i &lt; sumclustersize+Cluster[t][3]; i++)
    {
    matrix.resize(Cluster[t][3],2);
    matrix[j][0] = Coordinates[i][0];
    matrix[j][1] = Coordinates[i][1];
    j++;
    }
j = 0;
sumclustersize = sumclustersize+Cluster[t][3];
ve[t] = matrix; // hier ist das Problem !!! Obwohl ich ve &quot;gross&quot; genug definiert habe, bekomme ich irgendwann einen Segmenterror
}

v = ve; // fragt mich nicht, warum die Matritzen nicht direkt in v schreiben kann - sonst funktioniert es gar nicht.

}
</code></pre>
<p>**<br />
Fehlermeldung mit DGB:**<br />
Program received signal SIGSEGV, Segmentation fault.<br />
0x0804f57e in _Vector_impl (this=0x2, __a=@0xbffe7280)<br />
at /usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../include/c++/3.4.6/bits/stl_vector.h:85<br />
85 { }</p>
<p><strong>Beschreibung des ganzen Programms</strong><br />
Ich starte mit einer Null-Matrix und verteile dann zufaellig eine gewisse Anzahl Einsen (Teilchen) auf der Matrix. Teilchen die sich rechts, links, oben oder untern beruehren bilden eine Einheit (Cluster). Danach waehle ich einen beliebigen Cluster und bewege ihn in eine der 4 Richtungen. Danach testet das Programm ob der Cluster &quot;Nachbar&quot; eines weiteren Clusters geworden ist und verbindest diese gegebenenfalls. Dies fuehre ich solange fort, bis ich nur noch einen grossen Cluster habe.</p>
<p><strong>Beschreibung des Problems</strong><br />
In dem header &quot;build&quot; will ich einen Vektor &quot;v&quot; erzeugen, der als Eintraege alle derzeit vorhandenen Cluster (also Matritzen) enthaelt. Die Matrix &quot;Cluster&quot; enthaelt in der ersten bzw zweiten Spalte die x- bzw y-Koordinate eines Teilchens eines jeden Clusters und in der dritten Spalte die &quot;Groesse&quot; (Anzahl der Teilchen) des Clusters. In der Matrix Coordinates speichere ich die derzeitigen Koordinaten saemtlicher Teilchen. Wenn also zum ersten Cluster (erste Zeile in Matrix &quot;Cluster&quot;) 10 Teilchen gehoeren, dann stehen in den Eintraegen 0-9 der Matrix &quot;Coordinates&quot; alle Teilchen des ersten Clusters. Jetzt moechte ich diese Information als Matrix abspeichern und in v[0] ablegen, den 2. Cluster dann in v[1] usw. Das komische ist nun, dass es einwandfrei funktioniert, wenn die Startmatrix (auf der die Teilchen alle liegen) nicht groesser als 250x250 ist, sobald ich aber groesste Matritzen ausprobiere, beikomme ich den oben angezeigten Fehler.</p>
<p><strong>Danksagung <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="😃"
    /></strong><br />
So ich hoffe es kann mir jemand helfen - ich weiss mit meinen beschraenkten Mitteln naemlich wirklich nicht mehr weiter. Und seid nicht zu hart zu mir, falls ich einen Anfaengerfehler gemacht habe - ich bin naemlich einer :). Schon mal vielen Dank im Voraus - ausdruecklich auch wenn du dies &quot;nur&quot; gelesen hast, aber mir nicht weiterhelfen konntest.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/174053/segmentation-fault</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 11:05:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/174053.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 Feb 2007 14:40:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Segmentation fault on Thu, 22 Feb 2007 14:40:58 GMT]]></title><description><![CDATA[<p>Hallo zusammen!<br />
Ich arbeite seid ca. 3 Monaten mit C++ und es klappt eigentlich auch schon ganz gut, aber jetzt bin ich an meine Grenzen gestossen. Es geht um flogendes Teilprogramm:</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;
#include &lt;math.h&gt;
#include&quot;bamatrix.h&quot;

int build(Matrix&lt;int&gt;*&amp; v, Matrix&lt;int&gt; Cluster, Matrix&lt;int&gt; Coordinates, int index) //hier wundert mich schon, dass ich &quot;Matrix&lt;int&gt;*&amp; v&quot; und nicht &quot;Matrix&lt;int&gt;* v&quot; uebergeben muss - aber das ist nicht das Problem :)
{

int sumclustersize = 0;
Matrix&lt;int&gt; matrix;

Matrix&lt;int&gt;* ve = (Matrix&lt;int&gt;*)malloc(index*sizeof(Matrix&lt;int&gt;));

for(int t = 0; t &lt; index; t++)
{
int j = 0;
for(int i = sumclustersize; i &lt; sumclustersize+Cluster[t][3]; i++)
    {
    matrix.resize(Cluster[t][3],2);
    matrix[j][0] = Coordinates[i][0];
    matrix[j][1] = Coordinates[i][1];
    j++;
    }
j = 0;
sumclustersize = sumclustersize+Cluster[t][3];
ve[t] = matrix; // hier ist das Problem !!! Obwohl ich ve &quot;gross&quot; genug definiert habe, bekomme ich irgendwann einen Segmenterror
}

v = ve; // fragt mich nicht, warum die Matritzen nicht direkt in v schreiben kann - sonst funktioniert es gar nicht.

}
</code></pre>
<p>**<br />
Fehlermeldung mit DGB:**<br />
Program received signal SIGSEGV, Segmentation fault.<br />
0x0804f57e in _Vector_impl (this=0x2, __a=@0xbffe7280)<br />
at /usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../include/c++/3.4.6/bits/stl_vector.h:85<br />
85 { }</p>
<p><strong>Beschreibung des ganzen Programms</strong><br />
Ich starte mit einer Null-Matrix und verteile dann zufaellig eine gewisse Anzahl Einsen (Teilchen) auf der Matrix. Teilchen die sich rechts, links, oben oder untern beruehren bilden eine Einheit (Cluster). Danach waehle ich einen beliebigen Cluster und bewege ihn in eine der 4 Richtungen. Danach testet das Programm ob der Cluster &quot;Nachbar&quot; eines weiteren Clusters geworden ist und verbindest diese gegebenenfalls. Dies fuehre ich solange fort, bis ich nur noch einen grossen Cluster habe.</p>
<p><strong>Beschreibung des Problems</strong><br />
In dem header &quot;build&quot; will ich einen Vektor &quot;v&quot; erzeugen, der als Eintraege alle derzeit vorhandenen Cluster (also Matritzen) enthaelt. Die Matrix &quot;Cluster&quot; enthaelt in der ersten bzw zweiten Spalte die x- bzw y-Koordinate eines Teilchens eines jeden Clusters und in der dritten Spalte die &quot;Groesse&quot; (Anzahl der Teilchen) des Clusters. In der Matrix Coordinates speichere ich die derzeitigen Koordinaten saemtlicher Teilchen. Wenn also zum ersten Cluster (erste Zeile in Matrix &quot;Cluster&quot;) 10 Teilchen gehoeren, dann stehen in den Eintraegen 0-9 der Matrix &quot;Coordinates&quot; alle Teilchen des ersten Clusters. Jetzt moechte ich diese Information als Matrix abspeichern und in v[0] ablegen, den 2. Cluster dann in v[1] usw. Das komische ist nun, dass es einwandfrei funktioniert, wenn die Startmatrix (auf der die Teilchen alle liegen) nicht groesser als 250x250 ist, sobald ich aber groesste Matritzen ausprobiere, beikomme ich den oben angezeigten Fehler.</p>
<p><strong>Danksagung <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="😃"
    /></strong><br />
So ich hoffe es kann mir jemand helfen - ich weiss mit meinen beschraenkten Mitteln naemlich wirklich nicht mehr weiter. Und seid nicht zu hart zu mir, falls ich einen Anfaengerfehler gemacht habe - ich bin naemlich einer :). Schon mal vielen Dank im Voraus - ausdruecklich auch wenn du dies &quot;nur&quot; gelesen hast, aber mir nicht weiterhelfen konntest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233357</guid><dc:creator><![CDATA[Lagrange]]></dc:creator><pubDate>Thu, 22 Feb 2007 14:40:58 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Thu, 22 Feb 2007 14:50:55 GMT]]></title><description><![CDATA[<p>malloc + c++ objekte = boom</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233371</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233371</guid><dc:creator><![CDATA[gesunder Menschenverstand]]></dc:creator><pubDate>Thu, 22 Feb 2007 14:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Thu, 22 Feb 2007 14:55:47 GMT]]></title><description><![CDATA[<p>Um es ein wenig genauer zu machen. Du kannst beim dynamischen Erzeugen von Klasseninstanzen kein malloc verwenden, da hierbei keine Konstruktoren aufgerufen werden. Nimm new und es sollte gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233372</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233372</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 22 Feb 2007 14:55:47 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Thu, 22 Feb 2007 15:08:15 GMT]]></title><description><![CDATA[<p>vielen Dank Jungs!! Hab es schon hinbekommen. Nur falls nocheinmal jemand anderes das gleiche Problem hat - sozusagen fuer die Statistik :):</p>
<pre><code class="language-cpp">Matrix&lt;int&gt;* ve = new Matrix&lt;int&gt;[index];
</code></pre>
<p>-CLOSE-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233383</guid><dc:creator><![CDATA[Lagrange]]></dc:creator><pubDate>Thu, 22 Feb 2007 15:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Thu, 22 Feb 2007 15:21:43 GMT]]></title><description><![CDATA[<p>Ich hoffe du hast dann auch das richtige delete genommen. <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/1233391</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233391</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 22 Feb 2007 15:21:43 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Thu, 22 Feb 2007 15:36:02 GMT]]></title><description><![CDATA[<p>Um es ein wenig genauer zu machen.. :p</p>
<p>delete[]</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1233405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1233405</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Thu, 22 Feb 2007 15:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Tue, 01 May 2007 11:05:11 GMT]]></title><description><![CDATA[<p>Ok, jetzt bin ich dummerweise wieder in einer Sackgasse. Problem ist noch wie oben. Ich will ein Array von Matritzen erzeugen. Mit</p>
<p>Matrix&lt;int&gt;* Store = new Matrix&lt;int&gt;[index];</p>
<p>hat das wunderbar geklappt - zumindest solange ich die Groesse des Vektors kenne. Leider muss ich diesen jetzt erweitern/verlaengern.</p>
<p>Wenn ich normal Matrizen habe, funktioniert das wunderbar mit Store.resize(x,y). Leider sollte das hier nicht klappen. Hat einer eine Idee? Schon mal vielen Dank fuer die erneute Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276810</guid><dc:creator><![CDATA[Lagrange]]></dc:creator><pubDate>Tue, 01 May 2007 11:05:11 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Tue, 01 May 2007 14:11:59 GMT]]></title><description><![CDATA[<p>Lagrange schrieb:</p>
<blockquote>
<p>Ok, jetzt bin ich dummerweise wieder in einer Sackgasse. Problem ist noch wie oben. Ich will ein Array von Matritzen erzeugen. Mit</p>
<p>Matrix&lt;int&gt;* Store = new Matrix&lt;int&gt;[index];</p>
<p>hat das wunderbar geklappt - zumindest solange ich die Groesse des Vektors kenne. Leider muss ich diesen jetzt erweitern/verlaengern....</p>
</blockquote>
<p>Dann mach es nicht selbst, sondern nimm die Standardmittel dafür: std::vector</p>
<p>Dann sieht das so aus:</p>
<pre><code class="language-cpp">std::vector&lt;Matrix&lt;int&gt; &gt; Store(index);
// Achtung: Leerzeichen bei &quot;&gt; &gt;&quot; ist wichitg
</code></pre>
<p>Einzelne Elemente hinzufügen kannst Du mit push_back()...<br />
Und deleten brauchst Du auch nichts mehr.</p>
<p>Alternativ kannst Du natürlich das Rad neu erfinden und Dich mit einer Menge Segfaults rumschlagen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276954</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 01 May 2007 14:11:59 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Tue, 01 May 2007 14:38:46 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ups, da liegt glaub ich einiges im Argen:</p>
<ol>
<li>
<p>Du musst die Zeigerreferenz übergeben da ansonsten malloc() oder new() an eine temporäre Kopie zuweisen würden - nämlich an ein long das auf dem Stack liegt und den alten Wert des (NULL ?) - Zeigers enthält.</p>
</li>
<li>
<p>[index] meint doch eher [size], oder?</p>
</li>
<li>
<p>Ist Matrix eigentlich eine class oder ein struct?<br />
Was build() macht scheint mir in einen benuzerdefinierten Matrix-Konstruktor zu passen.</p>
</li>
<li>
<p>Wieso wählst Du diese Strategie zur Einrückung?<br />
Stroustrups Konvention sieht völlig anders aus und ist imo viel besser zu lesen.</p>
</li>
</ol>
<p>Solch kmplizierte Zeigerarithmetik muss optisch gut dargestellt werden.</p>
<ol start="5">
<li>Probleme bei 250*250 sind wohl eher Probleme bei 256*256 was 2^16 = 65536 enspricht. Also irgendwas bei 64k. Bei der Hausnummer gab's schon oft Probleme.</li>
</ol>
<p>=&gt; Wie ist Matrix intern aufgebaut ? &lt;=<br />
- vector&lt; vector&lt;T&gt; &gt;<br />
- T[][]</p>
<p>Vorsicht!</p>
<p>T[][] ist KEIN T** ! Stroustrup C++PL §C.7.3 - da geht's um Matrizen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";-)"
      alt="😉"
    /></p>
<ol start="6">
<li>Teilchen als 1/0 ist ja (noch) boolean, bleibt das so?<br />
Wenn ja : Du bildest es auf ein int ab. Hast Du Dich mal mit &lt;bitset&gt; befasst ? Es könnte eine effiziente Implemntierung damit geben.</li>
</ol>
<p>Grüsse</p>
<p>*this</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276969</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Tue, 01 May 2007 14:38:46 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Tue, 01 May 2007 15:22:49 GMT]]></title><description><![CDATA[<p>Vielen Dank!</p>
<p>Ich haette nicht gedacht, dass es so einfach ist <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="🙂"
    /> - warum komme ich auf sowas nie selbst :). Simons2s Vorschlag funkioniert einwandfrei</p>
<p>Auch vielen Dank an Gast++ - leider bin ich fuer deine Antwort noch zu dumm, werde sie aber auf jeden Fall nochmal in Ruhe durchlesen und versuchen zu verstehen. Ein Glueck tut es wie gesagt schon der Ansatz von Simon <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/1276992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276992</guid><dc:creator><![CDATA[Lagrange]]></dc:creator><pubDate>Tue, 01 May 2007 15:22:49 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 07:52:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15778">@Gast</a>++<br />
zu 1.<br />
Bei der einfachen Ereugung mit new braucht man keine Zeigerreferenz. Das brauchst du dann eher wenn du dieses in eine Funktion asulagerst. malloc hat hier eh nichts zu suchen da dort keine Konstruktoren aufgerufen werden. Es sei denn du bastelst dir hier was mit einem placement new zusammen was hier aber gar nicht nötig ist.<br />
zu 3.<br />
Wasc machst das für einen Unterschied ob es eine class oder eine struct ist? Die werden beide gleich behandelt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277314</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 02 May 2007 07:52:00 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 09:56:48 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/15778">@Gast</a>++<br />
zu 1.<br />
Bei der einfachen Ereugung mit new braucht man keine Zeigerreferenz. Das brauchst du dann eher wenn du dieses in eine Funktion asulagerst.</p>
</blockquote>
<p>Ja, und der Zeiger um den es geht ist ein formaler Parameter der build Funktion.<br />
Lies bitte mal die Zeilenendkommentare im OP.</p>
<p>Braunstein schrieb:</p>
<blockquote>
<p>malloc hat hier eh nichts zu suchen da</p>
</blockquote>
<p>Das war bereits erklärt worden; hier gings um die Übergabe der Zeigerreferenz.</p>
<p>Braunstein schrieb:</p>
<blockquote>
<p>dort keine Konstruktoren aufgerufen werden. Es sei denn du bastelst dir hier was mit einem placement new zusammen was hier aber gar nicht nötig ist.<br />
zu 3.<br />
Wasc machst das für einen Unterschied ob es eine class oder eine struct ist? Die werden beide gleich behandelt.</p>
</blockquote>
<p>Dann zeig mir doch bitte mal einen &quot;struct-Konstruktor&quot; mit ctor Semantik.<br />
<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>
<p>Grüsse</p>
<p>Gast++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277398</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277398</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Wed, 02 May 2007 09:56:48 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 10:13:24 GMT]]></title><description><![CDATA[<p>Gast++ schrieb:</p>
<blockquote>
<p>Braunstein schrieb:</p>
<blockquote>
<p>dort keine Konstruktoren aufgerufen werden. Es sei denn du bastelst dir hier was mit einem placement new zusammen was hier aber gar nicht nötig ist.<br />
zu 3.<br />
Wasc machst das für einen Unterschied ob es eine class oder eine struct ist? Die werden beide gleich behandelt.</p>
</blockquote>
<p>Dann zeig mir doch bitte mal einen &quot;struct-Konstruktor&quot; mit ctor Semantik.<br />
<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>
<p>Grüsse</p>
<p>Gast++</p>
</blockquote>
<p>Aus C++ Sicht gibt es nur einen Unterschied zwischen 'struct' und 'class' - struct-Elemente sind per Default public, class-Elemente private. Ansonsten sind beide <strong>völlig identisch</strong>.<br />
(insbesondere kann ein struct auch Memberfunktionen, private Member (mußt du explizit angeben) und sogar Ctor'en haben)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277421</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277421</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 02 May 2007 10:13:24 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 10:37:52 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Aus C++ Sicht gibt es nur einen Unterschied zwischen 'struct' und 'class' - struct-Elemente sind per Default public, class-Elemente private. Ansonsten sind beide <strong>völlig identisch</strong>.<br />
(insbesondere kann ein struct auch Memberfunktionen, private Member (mußt du explizit angeben) und sogar Ctor'en haben)</p>
</blockquote>
<p>Danke für den Hinweis!</p>
<p>Das ändert aber nichts daran dass die freie &quot;build&quot;-Funktion Aufgaben wahrnimmt die gut in einen Konstruktor passen würden.<br />
Auch in einen struct-Konstruktor.</p>
<p>Grüsse</p>
<p>Gast++</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277436</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277436</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Wed, 02 May 2007 10:37:52 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 11:59:12 GMT]]></title><description><![CDATA[<p>Ich stoere ja nur ungerne euere Fachsimpelei - von der ich btw kein Wort verstanden habe <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="🙂"
    /> - aber bezog sich ja auch ein Glueck nicht mehr richtig auf mein Problem.</p>
<p>Auf jeden Fall klappt die ganze Sache doch noch nicht so wirklich. Ich habe das gestern mal schnell mit einem kleinen Testprogramm getestet. Einwandfrei funktioniert:</p>
<pre><code class="language-cpp">#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;
#include &lt;math.h&gt;
#include&quot;bamatrix.h&quot;

int main()
{

int index = 0;
Matrix&lt;int&gt; M(2,2);
std::vector&lt;Matrix&lt;int&gt; &gt; Store(index); 

   for(int i = 0; i&lt;4; i++)
   {
   M[0][0] = i;
   M[0][1] = i;
   M[1][0] = i;
   M[1][1] = i;
   Store.push_back(M);
   }

Matrix&lt;int&gt; K(2,2);
K = Store[3];

cout &lt;&lt; K[1][1] &lt;&lt; endl;
}
</code></pre>
<p>Aber sobald ich es in ein groesseres Programm einbaue, bekomme ich beim ausfuehren von</p>
<pre><code class="language-cpp">std::vector&lt;Matrix&lt;int&gt; &gt; Store(index);
</code></pre>
<p>flogende Fehlermeldung (mit der man natuerlich wieder unglaublich viel anfangen kann): *** glibc detected *** malloc(): memory corruption (fast): 0x097d7fa8 ***</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277487</guid><dc:creator><![CDATA[Lagrange]]></dc:creator><pubDate>Wed, 02 May 2007 11:59:12 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 12:04:11 GMT]]></title><description><![CDATA[<p>Der vector-Ctor sollte eigentlich keine Probleme haben. Aber womöglich hast du den Heap schon vor diesem Aufruf zerlegt. Wie sieht denn der Ctor der Klasse Matrix&lt;&gt; aus?</p>
<p>(btw, den Parameter 'index' kannst du auch weglassen -der Default-Ctor legt bereits einen vector mit 0 Elementen an)</p>
<p>PS: Da fehlt übrigens ein '#include &lt;vector&gt;' - und statt der C-Header solltest du ihr C++ Äquivalent (&lt;cxxx&gt; anstelle von &lt;xxx.h&gt;) verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277491</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 02 May 2007 12:04:11 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 12:08:44 GMT]]></title><description><![CDATA[<p>Ersteinmal danke fuer die schnelle Antwort - ich weiss aber leider nicht was ein Ctor ist - sorry</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277492</guid><dc:creator><![CDATA[Lagrange]]></dc:creator><pubDate>Wed, 02 May 2007 12:08:44 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 12:10:56 GMT]]></title><description><![CDATA[<p>Ctor steht für Constructor und Dtor für Destructor,</p>
<p>Gruß Paddy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277493</guid><dc:creator><![CDATA[Paddy82]]></dc:creator><pubDate>Wed, 02 May 2007 12:10:56 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 12:21:52 GMT]]></title><description><![CDATA[<p>Ok ich bin nicht 100%ig sicher, aber ich wuerde sagen die ersten 2 Zeilen sind der Ctor - zur sicherheit habe ich mal den kompletten public-Bereich kopiert</p>
<pre><code class="language-cpp">Matrix();
    Matrix( int rows, int cols );  // size rows x cols
    Matrix ( const Matrix &amp; mat);  // copy constructor
    ~Matrix();

    // Assignment
    const Matrix&amp; operator = (const Matrix &amp; Rmat);

    // Accessors
    int numrows( ) const;  // number of rows
    int numcols( ) const;  // number of columns
    const vector&lt;ItemType&gt;&amp; operator[] (int index) const;

    // Modifiers
    vector&lt;ItemType&gt;&amp; operator[] (int index);
    void resize( int newRows, int newCols ); // resizes matrix to
                                             // newRows x newCols
</code></pre>
<p>Sieht aber wirklich fast so aus, dass ich davor irgendwas falsch gemacht habe - weil wenn ich die Deklaration einfach an den Anfang des Programms setze hat er keine Probleme mehr damit. Naja ich mache jetzt einfach mal so weiter und hoffe dass es so klappt <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>
<p>Vielen Dank ihr zwei</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277499</guid><dc:creator><![CDATA[Lagrange]]></dc:creator><pubDate>Wed, 02 May 2007 12:21:52 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 12:21:13 GMT]]></title><description><![CDATA[<p>Ja, die ersten drei Zeilen sind die Construktoren deiner Matrix-Klasse. Aber für die Fehlersuche dürfte es hilfreicher sein zu wissen, was sie eigentlich machen (in deinem Programm besonders der zweite -&quot;Matrix(int rows,int cols);&quot;).</p>
<p>PS: Sorry für die Verwirrung - das ist die Macht der Gewohnheit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277501</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 02 May 2007 12:21:13 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 12:22:08 GMT]]></title><description><![CDATA[<p>Die ersten drei Zeilen sind definitionen von Konstruktoren (Ctor's) und die vierte zeile ist der dtor</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277502</guid><dc:creator><![CDATA[Paddy82]]></dc:creator><pubDate>Wed, 02 May 2007 12:22:08 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 12:30:24 GMT]]></title><description><![CDATA[<p>Naja</p>
<pre><code class="language-cpp">Matrix&lt;int&gt; M(x,y)
</code></pre>
<p>definiert eine Matrix M in meinem Programm mit x Zeilen und y Spalten</p>
<p>P.S. sorry dass ich mich so dumm anstelle - vielleicht haette ich waehrend meinem Studium doch den Java-Kurs machen sollen, dann braeuchte ich nicht von vorne anfangen <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/1277512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277512</guid><dc:creator><![CDATA[Lagrange]]></dc:creator><pubDate>Wed, 02 May 2007 12:30:24 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 12:32:32 GMT]]></title><description><![CDATA[<p>Lagrange schrieb:</p>
<blockquote>
<p>Naja</p>
<pre><code class="language-cpp">Matrix&lt;int&gt; M(x,y)
</code></pre>
<p>definiert eine Matrix M in meinem Programm mit x Zeilen und y Spalten</p>
</blockquote>
<p>Und wie?</p>
<p>(Auf gut Deutsch: Zeig doch mal bitte den Funktionsrumpf zu diesem Konstruktor)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277516</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277516</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 02 May 2007 12:32:32 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 12:40:42 GMT]]></title><description><![CDATA[<p>Sorry, verstehe leider wirklich nicht, was du genau sehen willst. Ich haenge hier nochmal ein komplettes Programm an, was auch funktioniert und die Funktion Matrix benutzt. Sonst wuesste ich leider wirklich nicht, was ich dir noch schicken soll. Ich lade einfach den Header (bamatrix.h - einen Teil davon hast du schon gesehen - das war die Sache mit dem Ctor) und dann definiere ich meine Matrix mit</p>
<pre><code class="language-cpp">Matrix&lt;int&gt; M(x,y)
</code></pre>
<p>Und greife auf die einzelnen Eintraege mit M[a][b] zu.</p>
<pre><code class="language-cpp">#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;time.h&gt;
#include &lt;math.h&gt;
#include&quot;bamatrix.h&quot;

int main()
{

int index = 0;
Matrix&lt;int&gt; M(2,2);
std::vector&lt;Matrix&lt;int&gt; &gt; Store(index); 

   for(int i = 0; i&lt;4; i++)
   {
   M[0][0] = i;
   M[0][1] = i;
   M[1][0] = i;
   M[1][1] = i;
   Store.push_back(M);
   }

Matrix&lt;int&gt; K(2,2);
K = Store[3];

cout &lt;&lt; K[1][1] &lt;&lt; endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1277520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277520</guid><dc:creator><![CDATA[Lagrange]]></dc:creator><pubDate>Wed, 02 May 2007 12:40:42 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 12:47:36 GMT]]></title><description><![CDATA[<p>Lagrange schrieb:</p>
<blockquote>
<p>...bamatrix.h - einen Teil davon hast du schon gesehen - ...</p>
</blockquote>
<p>Ja - aber wir wollen noch mehr davon sehen ! <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>
<p>Und zwar genau den Teil, der mit</p>
<pre><code class="language-cpp">Matrix&lt;T&gt;::Matrix( int rows, int cols ) {
</code></pre>
<p>anfängt <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>
<p>Übrigens:</p>
<p>Lagrange schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">...
int index = 0;
std::vector&lt;Matrix&lt;int&gt; &gt; Store(index); 
...
</code></pre>
</blockquote>
<p>Das brauchst Du nicht - index ist überflüssig, wenn Du keine vorreservierte Größe möchtest:</p>
<pre><code class="language-cpp">...
std::vector&lt;Matrix&lt;int&gt; &gt; Store;
...
</code></pre>
<p>Macht dasselbe.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277521</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 02 May 2007 12:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to Segmentation fault on Wed, 02 May 2007 12:47:11 GMT]]></title><description><![CDATA[<p>Lagrange schrieb:</p>
<blockquote>
<p>Sorry, verstehe leider wirklich nicht, was du genau sehen willst.</p>
</blockquote>
<p>Ich würde gerne sehen, was du <strong>im Inneren</strong> des Konstruktors &quot;Matrix::Matrix(int rows,int cols)&quot; machst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277523</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 02 May 2007 12:47:11 GMT</pubDate></item></channel></rss>