<?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[Speicherzugriffsfehler (Speicherabzug geschrieben)]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich bräuchte kurz Hilfe zu meinem Code.<br />
Vorab: Es handelt sich um Code, der mit BALL und C++ programmiert wurde.<br />
An einer Stelle im Code erhalte ich einen Speicherzugriffsfehler. Ich nehme mal an, dass meine Variable nicht genug Speicherplatz bietet.<br />
Habe auch schon im Internet gesucht, aber nichts gefunden, das mir helfen konnte.<br />
Ich gebe erstmal nur die beiden Methoden an, um die es geht, da ich denke, der Fehler müsste dort zu finden sein.</p>
<pre><code>//Zählen der Kontakte zwischen den Aminosäuren
int countContacts(Atom* atom, Protein* protein)
{
        int contacts = 0;
	for (ChainIterator ch_it = protein-&gt;beginChain(); +ch_it; ++ch_it)
	{
		for (ResidueIterator r_it = ch_it-&gt;beginResidue(); +r_it; ++r_it)
		{
			if (r_it-&gt;isAminoAcid()) 
			{
				// Berechnung des Abstandes zwischen den C-alpha Atomen von zwei Aminosäuren
				// und zählen der Kontakte, wenn der Abstand &lt;= 7 ist
				Atom* atom1 = r_it-&gt;getAtom(&quot;CA&quot;);
                int dist = atom-&gt;getPosition().getDistance(atom1-&gt;getPosition());

                if (dist &lt;= 7) 
                {
					contacts += 1;
                }
             }
		}
	}
	return contacts;
}

// Zählen der Kontakte und Bestimmung der Häufigkeitsmatrix
void getHaeufigkeitsMatrix(Protein* protein)
{
	for (ChainIterator ch_it = protein-&gt;beginChain(); +ch_it; ++ch_it)
	{
		for (ResidueIterator r_it = ch_it-&gt;beginResidue(); +r_it; ++r_it)
		{
			if (r_it-&gt;isAminoAcid()) 
			{
                // HIER bei int k ERHALTE ICH DEN SPEICHERZUGRIFFSFEHLER
                int k = countContacts(r_it-&gt;getAtom(&quot;CA&quot;), protein) - 1; // -1, weil auch Kontakt mit sich selbst berechnet wird
                String a = Peptides::OneLetterCode(r_it-&gt;getName());
                // hier soll dann die Matrix gefuellt werden
			}
		}

	}
}
</code></pre>
<p>Ich habe dazugeschrieben, an welcher Stelle ich den Fehler erhalte.<br />
Wenn ihr noch Infos benötigt, sagt bescheid.<br />
Da man zur Ausführung des Programms einen Ordner mit über 100 Dateien benötigt, über die iteriert wird, ist es auch schwierig, dass ihr den Code testen könnt.<br />
Aber vielleicht sieht jemand auf Anhieb das Problem.</p>
<p>Schon mal Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/325884/speicherzugriffsfehler-speicherabzug-geschrieben</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Jul 2026 16:19:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/325884.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 22 May 2014 14:40:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Thu, 22 May 2014 14:40:57 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich bräuchte kurz Hilfe zu meinem Code.<br />
Vorab: Es handelt sich um Code, der mit BALL und C++ programmiert wurde.<br />
An einer Stelle im Code erhalte ich einen Speicherzugriffsfehler. Ich nehme mal an, dass meine Variable nicht genug Speicherplatz bietet.<br />
Habe auch schon im Internet gesucht, aber nichts gefunden, das mir helfen konnte.<br />
Ich gebe erstmal nur die beiden Methoden an, um die es geht, da ich denke, der Fehler müsste dort zu finden sein.</p>
<pre><code>//Zählen der Kontakte zwischen den Aminosäuren
int countContacts(Atom* atom, Protein* protein)
{
        int contacts = 0;
	for (ChainIterator ch_it = protein-&gt;beginChain(); +ch_it; ++ch_it)
	{
		for (ResidueIterator r_it = ch_it-&gt;beginResidue(); +r_it; ++r_it)
		{
			if (r_it-&gt;isAminoAcid()) 
			{
				// Berechnung des Abstandes zwischen den C-alpha Atomen von zwei Aminosäuren
				// und zählen der Kontakte, wenn der Abstand &lt;= 7 ist
				Atom* atom1 = r_it-&gt;getAtom(&quot;CA&quot;);
                int dist = atom-&gt;getPosition().getDistance(atom1-&gt;getPosition());

                if (dist &lt;= 7) 
                {
					contacts += 1;
                }
             }
		}
	}
	return contacts;
}

// Zählen der Kontakte und Bestimmung der Häufigkeitsmatrix
void getHaeufigkeitsMatrix(Protein* protein)
{
	for (ChainIterator ch_it = protein-&gt;beginChain(); +ch_it; ++ch_it)
	{
		for (ResidueIterator r_it = ch_it-&gt;beginResidue(); +r_it; ++r_it)
		{
			if (r_it-&gt;isAminoAcid()) 
			{
                // HIER bei int k ERHALTE ICH DEN SPEICHERZUGRIFFSFEHLER
                int k = countContacts(r_it-&gt;getAtom(&quot;CA&quot;), protein) - 1; // -1, weil auch Kontakt mit sich selbst berechnet wird
                String a = Peptides::OneLetterCode(r_it-&gt;getName());
                // hier soll dann die Matrix gefuellt werden
			}
		}

	}
}
</code></pre>
<p>Ich habe dazugeschrieben, an welcher Stelle ich den Fehler erhalte.<br />
Wenn ihr noch Infos benötigt, sagt bescheid.<br />
Da man zur Ausführung des Programms einen Ordner mit über 100 Dateien benötigt, über die iteriert wird, ist es auch schwierig, dass ihr den Code testen könnt.<br />
Aber vielleicht sieht jemand auf Anhieb das Problem.</p>
<p>Schon mal Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400340</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400340</guid><dc:creator><![CDATA[AlienFan]]></dc:creator><pubDate>Thu, 22 May 2014 14:40:57 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Thu, 22 May 2014 14:53:14 GMT]]></title><description><![CDATA[<p>r_it wird vermutlich ungültig sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400343</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400343</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Thu, 22 May 2014 14:53:14 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Thu, 22 May 2014 15:12:15 GMT]]></title><description><![CDATA[<p>Nein, das kann es nicht sein.<br />
Ich kann k auf der Konsole ausgeben lassen.<br />
Die Methode countContacts gibt eine Anzahl Kontakte zurück, also ein int.<br />
Zu jeder Aminosäure wird solch ein Kontakt berechnet.<br />
Nur ab einem gewissen Punkt bricht er ab mit dem Fehler &quot;Speicherzugriffsfehler(Speicherabzug geschrieben&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400353</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400353</guid><dc:creator><![CDATA[AlienFan]]></dc:creator><pubDate>Thu, 22 May 2014 15:12:15 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Thu, 22 May 2014 15:14:21 GMT]]></title><description><![CDATA[<p>Verwende doch mal den Debugger und schaue, ob einer von den Pointern NULL ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400354</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Thu, 22 May 2014 15:14:21 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Thu, 22 May 2014 15:50:50 GMT]]></title><description><![CDATA[<p>Hab den Debugger verwendet.<br />
Folgendes gibt er mir aus:</p>
<pre><code>Program received signal SIGSEGV, Segmentation fault.
0x00007ffff36da614 in BALL::TVector3&lt;float&gt;::getDistance(BALL::TVector3&lt;float&gt; const&amp;) const () from /usr/lib/libBALL.so.1.4
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2400362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400362</guid><dc:creator><![CDATA[AlienFan]]></dc:creator><pubDate>Thu, 22 May 2014 15:50:50 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Thu, 22 May 2014 16:35:24 GMT]]></title><description><![CDATA[<p>Nein, du sollst mit dem Debugger in die Funktion gehen und dir dort die Werte der Pointer anzeigen lassen.<br />
Was ist das überhaupt für eine komische Abbruchbedingung in den for-Schleifen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400366</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Thu, 22 May 2014 16:35:24 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Thu, 22 May 2014 17:12:06 GMT]]></title><description><![CDATA[<p>Ich weiß grad nicht, wie ich mit dem Debugger in die Funktion gehe. Habs mit gdb probiert laut Anleitung, die ich im Internet gefunden hab, aber das klappt irgendwie nicht.</p>
<p>Welche Abbruchbedingung meinst du? Das meiste sind Funktionen aus BALL (<a href="http://ball-trac.bioinf.uni-sb.de/wiki/CodeLibrary" rel="nofollow">http://ball-trac.bioinf.uni-sb.de/wiki/CodeLibrary</a>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400375</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400375</guid><dc:creator><![CDATA[AlienFan]]></dc:creator><pubDate>Thu, 22 May 2014 17:12:06 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Thu, 22 May 2014 17:26:27 GMT]]></title><description><![CDATA[<p>AlienFan schrieb:</p>
<blockquote>
<p>Welche Abbruchbedingung meinst du?</p>
</blockquote>
<p>Alle deine Abbruchbedingungen. Was die Abbruchbedingung einer for-Schleife ist, weißt du? Alle deine For-Schleifen sehen aber so oder ähnlich aus:</p>
<pre><code>for (ChainIterator ch_it = protein-&gt;beginChain(); +ch_it; ++ch_it)
</code></pre>
<p>+ch_it? Das sieht mir doch sehr nach einem Schreibfehler aus. Vielleicht ist *ch_it gemeint?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400376</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 22 May 2014 17:26:27 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Thu, 22 May 2014 18:20:35 GMT]]></title><description><![CDATA[<p>Ja sicher weiß ich, was eine Abbruchbedingung ist.<br />
Die sind aber korrekt so.<br />
Auf der Webseite von BALL steht folgendes bei einem Beispiel:</p>
<pre><code>Note that +ch_it equals ch_it != protein-&gt;endChain()
</code></pre>
<p>Ich hab noch gesagt bekommen, dass es sein kann, dass es das CA-Atom (welches ich abfrage), nicht existiert.<br />
Ich habe dann in der countContacts abgefragt, ob atom oder atom1 nicht NULL sind:</p>
<pre><code>//Zählen der Kontakte zwischen den Aminosäuren
int countContacts(Atom* atom, Protein* protein)
{
        int contacts = 0;
    for (ChainIterator ch_it = protein-&gt;beginChain(); +ch_it; ++ch_it)
    {
        for (ResidueIterator r_it = ch_it-&gt;beginResidue(); +r_it; ++r_it)
        {
            if (r_it-&gt;isAminoAcid())
            {
                // Berechnung des Abstandes zwischen den C-alpha Atomen von zwei Aminosäuren
                // und zählen der Kontakte, wenn der Abstand &lt;= 7 ist
                Atom* atom1 = r_it-&gt;getAtom(&quot;CA&quot;);
                if (atom || atom1 != NULL)
		      {
                  int dist = atom-&gt;getPosition().getDistance(atom1-&gt;getPosition());
					if (dist &lt;= 7) 
					{
						contacts += 1;
					}
				}
             }
        }
    }
    return contacts;
}
</code></pre>
<p>Aber das hat keine Änderung gebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400389</guid><dc:creator><![CDATA[AlienFan]]></dc:creator><pubDate>Thu, 22 May 2014 18:20:35 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Fri, 23 May 2014 14:18:12 GMT]]></title><description><![CDATA[<p>warum probierst du nicht, was SeppJ vorgeschlagen hat? +ch_it ist womöglich Schreibfehler für *ch_it, und dann kannst du auch gleich prüfen, ob +r_it ein SChreibfehler für *r_it ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400523</guid><dc:creator><![CDATA[großbuchstaben]]></dc:creator><pubDate>Fri, 23 May 2014 14:18:12 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Fri, 23 May 2014 14:28:27 GMT]]></title><description><![CDATA[<p>Er schreibt ja, dass die Bibliotheksentwickler eine äusserst kreative Operatorüberladung einsetzen. Manchmal sind benannte Funktionen (oder schlicht der Vergleich mit end) echt besser...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400524</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 23 May 2014 14:28:27 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherzugriffsfehler (Speicherabzug geschrieben) on Fri, 23 May 2014 15:16:53 GMT]]></title><description><![CDATA[<p>Ich würde den Code auf <code>ch_it != protein-&gt;endChain()</code> ändern. Also weder <code>+ch_it</code> noch <code>*ch_it</code> .</p>
<p>Um sicherzugehen dass die Doku nicht einfach falsch ist. Weil das unäre &quot;+&quot; zu überladen ja echt seltsam ist. Und wenn die Doku doch korrekt ist muss es ja egal sein.<br />
Und allein schon wegen dem &quot;principle of least surprise&quot; würde ich da lieber <code>ch_it != protein-&gt;endChain()</code> stehen haben als <code>+ch_it</code> .</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/31599">@AlienFan</a><br />
Das ist eine gute Möglichkeit für dich dich mit einem interaktiven Debugger auseinanderzusetzen. Mit einer IDE wie Netbeans, Codeblocks oder Eclipse CDT kann man damit echt schön arbeiten.<br />
Die ersten Schritte mit solchen Tools sind immer ein wenig mühsam und zeitraubend, aber je früher du dich damit vertraut machst, desto mehr Zeit sparst du dir später beim Fehlersuchen.<br />
Man kann solche Bugs natürlich auch ohne Debugger finden, aber mit geht es meist um Grössenordnungen schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2400529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2400529</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 23 May 2014 15:16:53 GMT</pubDate></item></channel></rss>