<?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[Probleme mit Dereferenzieren]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich bin der neue hier. Wie man meiner Signatur entnehmen kann Studier ich Elektro- und Informationstechnik an der Hochschule Darmstadt und befinde mich zZt. im ersten Semester. Dort sollen wir die handhabung einer höheren Programmiersprache erlernen und da unser Prof meint wird würdn Informatiker werden hat dieser einen Crashkurs in C++ mit uns durchgezogen.</p>
<p>Nun habe ich nach guten 6std Programmieraufwand es endlich geschafft das mein MergeSort Algorithmus läuft. Jetz wollte ich nur nicht jedes mal die Array größe von Hand eintragen und bin darauf gekommen das ganze mit Zeigern zu Realisieren. Allerdings lässt sich die so erstellte Tabelle nicht mehr Löschen und ich weis nich wieso ... ist vielleicht etwas bei der Dereferenzierung schief gegangen? Das Thema wurde bei uns leider nich so großzügig behandelt...</p>
<pre><code class="language-cpp">void merge(int a[], int l,int m,int r){
	int i=l, j=m+1, k=l;			// Zähler Initialisieren (k Hilfsarray, i=Anfang Folge 1, j=Anfang Folge 2

	int *b = new int [r];			// Hilfsarray b Deklarieren (zum Zwischenspeichern;
									// Größe: Gesamte größe der zu sortierenden Folge

	while(i&lt;=m &amp;&amp; j&lt;=r){				// Sollange beide Folgen nicht durchlaufen sind ...
		if(a[i]&lt;a[j]){					// ... vergleichen (Wert Folge 1 &lt; Wert Folge 2)
			b[k]=a[i];					// Kleineren Wert in B zwischen Speichern
			i++;
		}else{
			b[k]=a[j];
			j++;
		}
		k++;
	}

	if (i&gt;m){												//wenn i&gt;m ist ist die linke teilfolge also [l...m] durchlaufen
		for(int z=j; z&lt;=r;z++)								//Denn rest der Teilfolge [m+1...r] durch-
			b[k++]=a[z];									//laufen und in array b übertragen

	}else{													//die rechte teilfolge also [m+1...r] ist durchlaufen
		for(int z=i; z&lt;=m;z++)								//Denn rest der Teilfolge [l...m] durch-
			b[k++]=a[z];									//laufen und in array b übertragen
	}

	for(int h=l;h&lt;=r;h++)									// in b gespeicherte sortierte
		a[h]=b[h];											// folge in array a kopieren

	delete [] b;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/202411/probleme-mit-dereferenzieren</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 17:13:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/202411.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 11 Jan 2008 11:43:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Dereferenzieren on Fri, 11 Jan 2008 11:43:19 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich bin der neue hier. Wie man meiner Signatur entnehmen kann Studier ich Elektro- und Informationstechnik an der Hochschule Darmstadt und befinde mich zZt. im ersten Semester. Dort sollen wir die handhabung einer höheren Programmiersprache erlernen und da unser Prof meint wird würdn Informatiker werden hat dieser einen Crashkurs in C++ mit uns durchgezogen.</p>
<p>Nun habe ich nach guten 6std Programmieraufwand es endlich geschafft das mein MergeSort Algorithmus läuft. Jetz wollte ich nur nicht jedes mal die Array größe von Hand eintragen und bin darauf gekommen das ganze mit Zeigern zu Realisieren. Allerdings lässt sich die so erstellte Tabelle nicht mehr Löschen und ich weis nich wieso ... ist vielleicht etwas bei der Dereferenzierung schief gegangen? Das Thema wurde bei uns leider nich so großzügig behandelt...</p>
<pre><code class="language-cpp">void merge(int a[], int l,int m,int r){
	int i=l, j=m+1, k=l;			// Zähler Initialisieren (k Hilfsarray, i=Anfang Folge 1, j=Anfang Folge 2

	int *b = new int [r];			// Hilfsarray b Deklarieren (zum Zwischenspeichern;
									// Größe: Gesamte größe der zu sortierenden Folge

	while(i&lt;=m &amp;&amp; j&lt;=r){				// Sollange beide Folgen nicht durchlaufen sind ...
		if(a[i]&lt;a[j]){					// ... vergleichen (Wert Folge 1 &lt; Wert Folge 2)
			b[k]=a[i];					// Kleineren Wert in B zwischen Speichern
			i++;
		}else{
			b[k]=a[j];
			j++;
		}
		k++;
	}

	if (i&gt;m){												//wenn i&gt;m ist ist die linke teilfolge also [l...m] durchlaufen
		for(int z=j; z&lt;=r;z++)								//Denn rest der Teilfolge [m+1...r] durch-
			b[k++]=a[z];									//laufen und in array b übertragen

	}else{													//die rechte teilfolge also [m+1...r] ist durchlaufen
		for(int z=i; z&lt;=m;z++)								//Denn rest der Teilfolge [l...m] durch-
			b[k++]=a[z];									//laufen und in array b übertragen
	}

	for(int h=l;h&lt;=r;h++)									// in b gespeicherte sortierte
		a[h]=b[h];											// folge in array a kopieren

	delete [] b;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1434795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1434795</guid><dc:creator><![CDATA[AmonNascaroth]]></dc:creator><pubDate>Fri, 11 Jan 2008 11:43:19 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Dereferenzieren on Fri, 11 Jan 2008 11:50:55 GMT]]></title><description><![CDATA[<p>Mit tabelle meisnt du das:</p>
<pre><code class="language-cpp">int *b = new int [r];            // Hilfsarray b Deklarieren (zum Zwischenspeichern;
</code></pre>
<p>??</p>
<p>und mit löschen meinst du das:</p>
<pre><code class="language-cpp">delete [] b;
</code></pre>
<p>??</p>
<p>Woran erkennst du ob er das nicht löscht?</p>
<p>P.S: du weist schon da ein Array mit 10 Elemente ein index 0 bis 9 hat!?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1434804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1434804</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 11 Jan 2008 11:50:55 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Dereferenzieren on Fri, 11 Jan 2008 12:05:40 GMT]]></title><description><![CDATA[<p>1. <strong>Wähle vernünftige Bezeichner!</strong> In spätestens einer Woche weißt Du selbst nicht mehr, was i, j, k, l, f und g waren. Wir wissen es erst recht nicht.</p>
<p>2. &quot;Allerdings lässt sich die so erstellte Tabelle nicht mehr Löschen&quot; ist ungefähr so akkurat wie &quot;Leider fährt mein Auto nicht&quot;. Woran glaubst Du zu merken, dass sich die Tabelle (welche?) nicht löschen lässt? Fehlermeldungen?</p>
<p>3. (Kannst Du nichts für, eher der Prof) In C++ gibt es wesentlich schönere Möglichkeiten als new/delete, gerade für Mengen integraler Typen. Nur Interessehalber: Wie sieht Eure main-Signatur aus? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1434825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1434825</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 11 Jan 2008 12:05:40 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Dereferenzieren on Fri, 11 Jan 2008 12:10:12 GMT]]></title><description><![CDATA[<p>die siehgt sicher</p>
<pre><code class="language-cpp">void main(void);
</code></pre>
<p>aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <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/1434828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1434828</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Fri, 11 Jan 2008 12:10:12 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Dereferenzieren on Fri, 11 Jan 2008 19:03:49 GMT]]></title><description><![CDATA[<p>Hab mal den Kompleten Code angehängt. &quot;In meinem Stil&quot; verwende ich als Schleifenzähler Grundsätzlich i j und k und immer in jeder Schleife die selben Buchstaben. Ich komm damit klar, andere weniger *g*.</p>
<p>Meine Bezeichner, ok ich geb zu &quot;l&quot; &quot;r&quot; und &quot;m&quot; sind in sofern nich ganz Eindeutig: l steht für links (Startwert der Sortierung) r steht für Rechts (Endwert der Sortierung, also ist l€[l...r] die größe meines Arrays das es zu Sortieren gilt) und m ist die Mitte der Folge.</p>
<p>Und ja mit &quot;Tabelle&quot; hab ich Fälschlicherweise</p>
<pre><code class="language-cpp">int *b = new int [r];
</code></pre>
<p>Gemeint, mit Löschen das</p>
<pre><code class="language-cpp">delete [] b
</code></pre>
<p>.</p>
<p>Worran ich Erkenne das er nicht Löscht? Daran:<br />
<a href="http://img141.imageshack.us/my.php?image=screenfz6.jpg" rel="nofollow">[img=http://img141.imageshack.us/img141/4107/screenfz6.th.jpg]</a></p>
<p>Stellt sich mir die Frage wo das Problem liegt <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>Und ja ich weis der Algorithmus is nich der beste, aber Sortieralgorithmen fallen mir als Programmier&quot;anfänger&quot; (mit bisserl erfahrung) etwas Schwer und ich bin froh das ich neben dem ganzen anderen Käse den es zu bewältigen gilt die Aufgabe überhaupt zum Laufen gebracht habe!</p>
<p>Hier noch der gesamte Quelltext:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

void merge(int a[], int l,int m,int r){
	int i=l, j=m+1, k=l;			// Zähler Initialisieren (k Hilfsarray, i=Anfang Folge 1, j=Anfang Folge 2

	int *b = new int [r];			// Hilfsarray b Deklarieren (zum Zwischenspeichern;
									// Größe: Gesamte größe der zu sortierenden Folge

	while(i&lt;=m &amp;&amp; j&lt;=r){				// Sollange beide Folgen nicht durchlaufen sind ...
		if(a[i]&lt;a[j]){					// ... vergleichen (Wert Folge 1 &lt; Wert Folge 2)
			b[k]=a[i];					// Kleineren Wert in B zwischen Speichern
			i++;
		}else{
			b[k]=a[j];
			j++;
		}
		k++;
	}

	if (i&gt;m){												//wenn i&gt;m ist ist die linke teilfolge also [l...m] durchlaufen
		for(int z=j; z&lt;=r;z++)								//Denn rest der Teilfolge [m+1...r] durch-
			b[k++]=a[z];									//laufen und in array b übertragen

	}else{													//die rechte teilfolge also [m+1...r] ist durchlaufen
		for(int z=i; z&lt;=m;z++)								//Denn rest der Teilfolge [l...m] durch-
			b[k++]=a[z];									//laufen und in array b übertragen
	}

	for(int h=l;h&lt;=r;h++)									// in b gespeicherte sortierte
		a[h]=b[h];											// folge in array a kopieren

	delete [] b;
}

void mergesort(int a[], int l, int r){						// a[]=Tabelle, l=Startwert der Folge im Array, r= Ende der Folge
	if(l&lt;r){												// Anfang und Ende liegen Re-Li und nicht Li-Re
		int m=(l+r)/2;										// Halbieren der Gesamten Folge
		mergesort(a, l, m);									// Linken Teil sortieren
		mergesort(a, m+1, r);								// Rechten Teil sortieren
		merge(a, l, m, r);									// Mischen der Teilfolgen
	}
}

void main(){
	const int max=1000;
	// 1.000, 10.000, 100.000 und 200.000 Testinhaltsmengen
	int A[max];
	for(int i=0; i&lt;max; i++)
		A[i]=rand();

	mergesort(A,0,max-1);

	for(int i=0; i&lt;max; i++){
		cout &lt;&lt; A[i] &lt;&lt; endl;
	}

	system(&quot;PAUSE&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1435083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435083</guid><dc:creator><![CDATA[AmonNascaroth]]></dc:creator><pubDate>Fri, 11 Jan 2008 19:03:49 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Dereferenzieren on Fri, 11 Jan 2008 19:14:07 GMT]]></title><description><![CDATA[<p>Die Fehlermeldung bedeutet, daß du dir den Speicher zerschossen hast!</p>
<p>Du schreibst auf Speicherbereiche außerhalb des definierten Bereichs deines Array. Du darfst nur auf die Indizes 0 bis (r-1) zugreifen, d.h.</p>
<pre><code class="language-cpp">for(int h=0;h&lt;r;h++) // in b gespeicherte sortierte
   a[h]=b[h];        // folge in array a kopieren
</code></pre>
<p>Evtl. sind noch andere Fehler drin...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435092</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 11 Jan 2008 19:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Dereferenzieren on Fri, 11 Jan 2008 19:42:25 GMT]]></title><description><![CDATA[<p>Ja da muss ich dir recht geben. Allerdings hatte ich in meiner Version bevor ich auf die Gloreiche Idee kam ein Array mit Pointern zu machen dieses stehen:<br />
[cpp]int b[4000]; // Doppelte Größe des Urarrays[/b]</p>
<p>Weis auch nich wieso, anders hats aus mir unbekannten gründen nicht Funktioniert.</p>
<p>Wenn ich überall &quot;zähler&lt;=r&quot; durch &quot;zähler&lt;r&quot; ersetze, läuft zwar das Programm, nur die Sortierung wirft immer mal wieder einen wesentlich kleineren Wert dazwischen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /></p>
<p>Bin da doch rel. Ratlos...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1435103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1435103</guid><dc:creator><![CDATA[AmonNascaroth]]></dc:creator><pubDate>Fri, 11 Jan 2008 19:42:25 GMT</pubDate></item></channel></rss>