<?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[Zugriffsverletzung]]></title><description><![CDATA[<p>/* Bekomme beim Compilieren immer die Fehlermedlung: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcdcdcdcd. Hab mich schon mal erkundigt das diese Fehlermeldung häufig bei Überschreitung von Speicherbereich kommt. Mein char datum array wird jedoch nie zu voll.</p>
<p>Vielleicht findet ihr ja den Fehler (hab ein KOmmentat hinter die Zeile gesetzt)</p>
<p>Vielen Dank im Voraus <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>*/</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class ListenElement
{

private:
	int tagesproduktion;
	char datum[11];
	ListenElement *next;

public:
	ListenElement(){} // default konstruktor
	ListenElement(int tagesp, char dat[], ListenElement el) //Konstruktor
	{
		tagesproduktion = tagesp;
		strncpy(datum,dat,12);
		next = &amp;el;
	}

	friend class Produktionsliste;

};

class Produktionsliste
{
private:
	ListenElement *first, *last;

public:
	Produktionsliste() // Default Konstruktor
	{
		first = NULL;
		last = NULL;
	}

	void insert(int val, char dat []) // Elemente in Liste einfügen
	{
		ListenElement *newelem = new ListenElement(); 

		newelem-&gt;tagesproduktion = val; 
		strcpy(newelem-&gt;datum, dat); 
		first = newelem; 

		if(last != NULL)
		{	
			last = newelem;
		}
	}

int removeElements(int val) // Element mit bestimmten Wert löschen
{		
	ListenElement *current;	
	ListenElement *prev, *freigabe;
	int counter = 0;				

	if(first==NULL)	
		return 0;

	current = first;		
	prev = first;		

	while(current!=NULL)	
	{
		if(current-&gt;tagesproduktion==val) // hier Fehlermeldung !!!	
		{
			if(current ==first)		
			{
				first = current-&gt;next;	

				if(last == current)		
					last = NULL;			
			}								

			else							
			{
				prev-&gt;next = current-&gt;next;

				if(last == current)	
					last = prev;		
			}

			counter++;						
			freigabe = current;
			current = current-&gt;next;			
			delete freigabe;				
		}
		else 
		{
			prev = current;
			current = current-&gt;next;
		}
	}
	return counter;
}

};

int main()
{	
	Produktionsliste l; 
	l.insert(4,&quot;12.01.2009&quot;);
	l.insert(1,&quot;13.01.2009&quot;);
	l.insert(5,&quot;asdfasf&quot;);
	l.insert(1,&quot;12.01.2008&quot;);
	l.insert(4,&quot;2009&quot;);

	l.removeElements(4);

	cin.get();
	return 0;
}
</code></pre>
<p>//Edit: Code Tag</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/231269/zugriffsverletzung</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 22:43:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/231269.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Jan 2009 10:09:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriffsverletzung on Thu, 08 Jan 2009 10:44:48 GMT]]></title><description><![CDATA[<p>/* Bekomme beim Compilieren immer die Fehlermedlung: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcdcdcdcd. Hab mich schon mal erkundigt das diese Fehlermeldung häufig bei Überschreitung von Speicherbereich kommt. Mein char datum array wird jedoch nie zu voll.</p>
<p>Vielleicht findet ihr ja den Fehler (hab ein KOmmentat hinter die Zeile gesetzt)</p>
<p>Vielen Dank im Voraus <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>*/</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class ListenElement
{

private:
	int tagesproduktion;
	char datum[11];
	ListenElement *next;

public:
	ListenElement(){} // default konstruktor
	ListenElement(int tagesp, char dat[], ListenElement el) //Konstruktor
	{
		tagesproduktion = tagesp;
		strncpy(datum,dat,12);
		next = &amp;el;
	}

	friend class Produktionsliste;

};

class Produktionsliste
{
private:
	ListenElement *first, *last;

public:
	Produktionsliste() // Default Konstruktor
	{
		first = NULL;
		last = NULL;
	}

	void insert(int val, char dat []) // Elemente in Liste einfügen
	{
		ListenElement *newelem = new ListenElement(); 

		newelem-&gt;tagesproduktion = val; 
		strcpy(newelem-&gt;datum, dat); 
		first = newelem; 

		if(last != NULL)
		{	
			last = newelem;
		}
	}

int removeElements(int val) // Element mit bestimmten Wert löschen
{		
	ListenElement *current;	
	ListenElement *prev, *freigabe;
	int counter = 0;				

	if(first==NULL)	
		return 0;

	current = first;		
	prev = first;		

	while(current!=NULL)	
	{
		if(current-&gt;tagesproduktion==val) // hier Fehlermeldung !!!	
		{
			if(current ==first)		
			{
				first = current-&gt;next;	

				if(last == current)		
					last = NULL;			
			}								

			else							
			{
				prev-&gt;next = current-&gt;next;

				if(last == current)	
					last = prev;		
			}

			counter++;						
			freigabe = current;
			current = current-&gt;next;			
			delete freigabe;				
		}
		else 
		{
			prev = current;
			current = current-&gt;next;
		}
	}
	return counter;
}

};

int main()
{	
	Produktionsliste l; 
	l.insert(4,&quot;12.01.2009&quot;);
	l.insert(1,&quot;13.01.2009&quot;);
	l.insert(5,&quot;asdfasf&quot;);
	l.insert(1,&quot;12.01.2008&quot;);
	l.insert(4,&quot;2009&quot;);

	l.removeElements(4);

	cin.get();
	return 0;
}
</code></pre>
<p>//Edit: Code Tag</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641582</guid><dc:creator><![CDATA[Stephan88]]></dc:creator><pubDate>Thu, 08 Jan 2009 10:44:48 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung on Thu, 08 Jan 2009 10:13:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Verwende bitte die Code Tags das macht das deutlich leserlicher.<br />
Das hier</p>
<pre><code class="language-cpp">strncpy(datum,dat,12);
</code></pre>
<p>ist schonmal falsch, da datum ja nur Platz für 11 Zeichen hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641586</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641586</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 08 Jan 2009 10:13:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung on Thu, 08 Jan 2009 10:19:43 GMT]]></title><description><![CDATA[<p>Da hast du recht Danke <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="🙂"
    /><br />
Hier noch einmal der Code:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

using namespace std;

class ListenElement
{

private:
	int tagesproduktion;
	char datum[11];
	ListenElement *next;

public:
	ListenElement(){} 
	ListenElement(int tagesp, char dat[], ListenElement el)
	{
		tagesproduktion = tagesp;
		strncpy(datum,dat,11);
		next = &amp;el;
	}

	friend class Produktionsliste;

};

class Produktionsliste
{
private:
	ListenElement *first, *last;

public:
	Produktionsliste()
	{
		first = NULL;
		last = NULL;
	}

	void insert(int val, char dat [])
	{
		ListenElement *newelem = new ListenElement(); 

		newelem-&gt;tagesproduktion = val; 
		strcpy(newelem-&gt;datum, dat); 
		first = newelem; 

		if(last != NULL)
		{	
			last = newelem;
		}
	}

int removeElements(int val)
{		
	ListenElement *current;	
	ListenElement *prev, *freigabe;
	int counter = 0;				

	if(first==NULL)	
		return 0;

	current = first;		
	prev = first;		

	while(current!=NULL)	
	{
		if(current-&gt;tagesproduktion==val)	
		{
			if(current ==first)		
			{
				first = current-&gt;next;	

				if(last == current)		
					last = NULL;			
			}								

			else							
			{
				prev-&gt;next = current-&gt;next;

				if(last == current)	
					last = prev;		
			}

			counter++;						
			freigabe = current;
			current = current-&gt;next;			
			delete freigabe;				
		}
		else 
		{
			prev = current;
			current = current-&gt;next;
		}
	}
	return counter;
}

};

int main()
{	
	Produktionsliste l; 
	l.insert(4,&quot;12.01.2009&quot;);
	l.insert(1,&quot;13.01.2009&quot;);
	l.insert(5,&quot;asdfasf&quot;);
	l.insert(1,&quot;12.01.2008&quot;);
	l.insert(4,&quot;2009&quot;);

	l.removeElements(4);

	cin.get();
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1641589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641589</guid><dc:creator><![CDATA[Stephan88]]></dc:creator><pubDate>Thu, 08 Jan 2009 10:19:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung on Thu, 08 Jan 2009 10:25:59 GMT]]></title><description><![CDATA[<p>Stephan88 schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>1. Bitte verwende die Code-Tags für deinen Code ([cpp ]/*hier den Code rein*/[/cpp ] - Ohne die Leerzeichen in den cpp-Tags).</p>
<p>Stephan88 schrieb:</p>
<blockquote>
<p>Bekomme beim Compilieren immer die Fehlermedlung: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xcdcdcdcd. Hab mich schon mal erkundigt das diese Fehlermeldung häufig bei Überschreitung von Speicherbereich kommt.</p>
</blockquote>
<p>Ich würde noch allgemeiner sagen: Dieser Fehler kommt immer wenn ein Programm in einen Speicherbereich zugreifen will, der nicht für dieses reserviert ist...</p>
<p>2. Normalerweise trennt man Deklaration (Header; z.B. *.h) und Definition (Source; z.B. *.cpp), gewöhn dir bitte das using namespace gleich für die Deklaration ab.<br />
3. Ich würde statt C-Strings die C++ Stringklasse verwenden, zudem fehlt in deinem Programm auch noch das include der C-Bibliothek für die Stringbehandlung (kann indirekt durch #include &lt;string&gt; eingebunden sein, richtiger wäre aber wegen strncpy und Co. &lt;cstring&gt; wenn man die C-Funktionen nutzt)...</p>
<p>[cpp]<br />
#include &lt;iostream&gt;<br />
#include &lt;string&gt;</p>
<p>using namespace std;</p>
<p>class ListenElement<br />
{<br />
//...<br />
public:<br />
// &lt;DIES IST EINE KOPIE!&gt;<br />
ListenElement(/<em>...</em>/, ListenElement element) //Konstruktor<br />
{<br />
//...<br />
next = ⪙ // Hier weist du den Zeiger einer nur lokal vorhandenen<br />
// Kopie zu!<br />
}<br />
};<br />
[/cpp]</p>
<p>4. Objekte solltest du niemals als Kopie übergeben, lieber als konstante Referenz.</p>
<pre><code class="language-cpp">//                     &lt;NUN WIRD KEINE KOPIE ERZEUGT&gt;
ListenElement(/*...*/, ListenElement const &amp; element)
</code></pre>
<p>P.S: Des weiteren:<br />
Du solltest mal nach Initialisierungslisten suchen (Im Zusammenhang mit dem Konstruktor)... UND niemals etwas uninitialisiert lassen (Dein Standardkonstruktor ist so ein schlechtes Beispiel).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641590</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 08 Jan 2009 10:25:59 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung on Thu, 08 Jan 2009 10:29:33 GMT]]></title><description><![CDATA[<p>@ asc</p>
<p>Trenne Deklaration und Definition normalerweise auch.</p>
<p>Warum soll ich</p>
<pre><code class="language-cpp">using namespace std;
</code></pre>
<p>nicht deklarieren ?</p>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641597</guid><dc:creator><![CDATA[Stephan88]]></dc:creator><pubDate>Thu, 08 Jan 2009 10:29:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung on Thu, 08 Jan 2009 10:35:05 GMT]]></title><description><![CDATA[<p>Weil das den Sinn von dem Namespace zerstört, und weiterhin zur globalisierung und somit zu Namenskonflikten kommen kann.</p>
<p>Wäre es nicht langsam an der Zeit das wir das auch mit ins FAQ aufnehmen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641598</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Thu, 08 Jan 2009 10:35:05 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung on Thu, 08 Jan 2009 10:56:54 GMT]]></title><description><![CDATA[<p>Hat jemand eine Lösung für den eigentlichen Fehler gefunden ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641611</guid><dc:creator><![CDATA[Stephan88]]></dc:creator><pubDate>Thu, 08 Jan 2009 10:56:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung on Thu, 08 Jan 2009 11:41:06 GMT]]></title><description><![CDATA[<p>Stephan88 schrieb:</p>
<blockquote>
<p>Hat jemand eine Lösung für den eigentlichen Fehler gefunden ?</p>
</blockquote>
<p>Ist jetzt schwierig zu sagen, aber versuch einmal die inserts zu verringern und dann mit dem Debugger zu schauen, wo genau etwas falsch läuft.<br />
Ich würde einmal darauf tippen, dass du hier:</p>
<pre><code class="language-cpp">counter++;                       
            freigabe = current;
            current = current-&gt;next;           
            delete freigabe;
</code></pre>
<p>ein Problem hast und current-&gt;next dir wieder den Zeiger zurückgibt, der auch von current bereits enthalten wird und danach gibst du den frei und schon hast du einen Zeiger, der auf einen ungültigen Bereich zeigt. Und das kann so einen Fehler auslösen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641644</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Thu, 08 Jan 2009 11:41:06 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung on Thu, 08 Jan 2009 11:48:20 GMT]]></title><description><![CDATA[<p>Stephan88 schrieb:</p>
<blockquote>
<p>Hat jemand eine Lösung für den eigentlichen Fehler gefunden ?</p>
</blockquote>
<p>Also einen potentiellen Fehler habe ich schon angemerkt. Das du mit Zeigern arbeitest, die auf nichts gültiges zeigen (ListenElement::next zeigt wegen Kopie nicht nur während des Konstruktors auf einen gültigen Bereich). Deinen Gesamtcode werde ich aber erst einmal nicht analysieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1641647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1641647</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 08 Jan 2009 11:48:20 GMT</pubDate></item></channel></rss>