<?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 beim Schreiben an Position 0x0......]]></title><description><![CDATA[<p>hallo zusammen</p>
<p>ich habe mit meinem folgenden Programm ein Problem, in der Zeile 21 (wohl dann auch 26 und 32 bekomme ich folgende Warnung die zum abbruch/stopp des programmes führt</p>
<pre><code>Unbehandelte Ausnahme bei 0x00411c2e in BigInt-Schulv.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x00646000.
</code></pre>
<p>nur leider komm ich mit meinen derzeitigen wissen leider nicht weiter (in der Schule jedes Jahr ne andere PR-Sprache....)</p>
<p>eine Warnung in Zeile 86 taucht ebenso noch auf</p>
<pre><code>Warnung	1	warning C4172: Adresse einer lokalen Variablen oder eines temporären Werts wird zurückgegeben
</code></pre>
<p>ich hoffe mir kann wer so schnell wie möglich weiterhelfen, hab scho alles probiert, half nix</p>
<p>mfg und vielen dank schonmal</p>
<p>Fanati_C</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;
class
	BigInt
{
	char *zahl;
	char vorzeichen;
	int len;
	BigInt addiere(BigInt op1, BigInt op2)
	{
		BigInt erg(0);
		int u=0,i;
		erg.zahl=new char[erg.len=((op1.len&gt;op2.len)?op1.len:op2.len)+1];
		erg.vorzeichen='+';
		for(i=0; (op1.len&gt;op2.len)?op1.len:op2.len; i++)
		{
			if(op1.len&lt;i || op2.len&lt;i)
			{
				if(op1.len&lt;i)
				{
					erg.zahl[i]=(u+=op2.zahl[i])%10;
					u/=10;
				}
				else
				{
					erg.zahl[i]=(u+=op1.zahl[i])%10;
					u/=10;
				}
			}
			else
			{
				erg.zahl[i]=(u+=op1.zahl[i]+op2.zahl[i])%10;
				u/=10;
			}
		}
		erg.zahl[i]=u;
		return erg;
	}

public:
	BigInt(int x)
	{
		if (x&lt;0)
		{
			vorzeichen='-';
			x=-x;
		}
		else
		{
			vorzeichen='+';
		}
		int y,i;
		y=x;
		for (i=0;y&gt;0;i++)
		{
			y/=10;
		}
		zahl=new char[len=(i &lt; 1)?1:i];
		for (y=x,i=0;y&gt;0;i++)
		{ 
			zahl[i]=y%10;
			y/=10;
		}
	}
		BigInt(char d[])
		{
			//int i=0;
			//if(d[i]);
			//for(i; d[i],m
		}
	void print (void)
	{
		int i;
		cout&lt;&lt;vorzeichen;
		for (i=len;i&gt;-1;i--)
		{
			if(zahl[i]&gt;=(char)0&amp;&amp;zahl[i]&lt;=(char)9)
				cout &lt;&lt; (char) (zahl[i]+'0');
		}
		cout&lt;&lt;endl;
	}
	friend bool operator&lt;(const BigInt &amp;a, BigInt &amp;b);

	BigInt &amp;operator+(const BigInt &amp;a)
	{
		return addiere(*this, a);
	}

};

bool operator&lt;(const BigInt &amp;a, BigInt &amp;b) //&lt;- bool friend operator &lt;(...)
		{
			int i;
			if(a.vorzeichen=='-' &amp;&amp; b.vorzeichen=='+')return true; //-&lt;+
			if(a.vorzeichen=='+' &amp;&amp; b.vorzeichen=='-')return true; //+&lt;-
			if (a.len&lt;b.len)return ('+'==a.vorzeichen)?true:false;
			if (a.len&lt;b.len)return ('+'==a.vorzeichen)?false:true;
			for(i=a.len-1; i&gt;=0; i--)
			{
				if(a.zahl[i]&lt;b.zahl[i])return ('+'==a.vorzeichen)?true:false;
				if(a.zahl[i]&gt;b.zahl[i])return ('+'==a.vorzeichen)?false:true;;
			}
			//char a[10]  V1.a[2]				char *a  V2-&gt;a[2]
			return false;
		}

int main()
{
	BigInt b1(100), b2(1),b3(-5245453),b4(&quot;  +221234567&quot;), b5=b4;
	//b1.print();
	//if (b1&lt;b2)
	b2=b1+b2;
	b2.print();
	b2=b2+b2;
	b2.print();
	cout&lt;&lt;endl;
	system(&quot;Pause&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/261249/zugriffsverletzung-beim-schreiben-an-position-0x0</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 13:27:21 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261249.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 Feb 2010 18:52:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriffsverletzung beim Schreiben an Position 0x0...... on Mon, 15 Feb 2010 18:52:47 GMT]]></title><description><![CDATA[<p>hallo zusammen</p>
<p>ich habe mit meinem folgenden Programm ein Problem, in der Zeile 21 (wohl dann auch 26 und 32 bekomme ich folgende Warnung die zum abbruch/stopp des programmes führt</p>
<pre><code>Unbehandelte Ausnahme bei 0x00411c2e in BigInt-Schulv.exe: 0xC0000005: Zugriffsverletzung beim Schreiben an Position 0x00646000.
</code></pre>
<p>nur leider komm ich mit meinen derzeitigen wissen leider nicht weiter (in der Schule jedes Jahr ne andere PR-Sprache....)</p>
<p>eine Warnung in Zeile 86 taucht ebenso noch auf</p>
<pre><code>Warnung	1	warning C4172: Adresse einer lokalen Variablen oder eines temporären Werts wird zurückgegeben
</code></pre>
<p>ich hoffe mir kann wer so schnell wie möglich weiterhelfen, hab scho alles probiert, half nix</p>
<p>mfg und vielen dank schonmal</p>
<p>Fanati_C</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
using namespace std;
class
	BigInt
{
	char *zahl;
	char vorzeichen;
	int len;
	BigInt addiere(BigInt op1, BigInt op2)
	{
		BigInt erg(0);
		int u=0,i;
		erg.zahl=new char[erg.len=((op1.len&gt;op2.len)?op1.len:op2.len)+1];
		erg.vorzeichen='+';
		for(i=0; (op1.len&gt;op2.len)?op1.len:op2.len; i++)
		{
			if(op1.len&lt;i || op2.len&lt;i)
			{
				if(op1.len&lt;i)
				{
					erg.zahl[i]=(u+=op2.zahl[i])%10;
					u/=10;
				}
				else
				{
					erg.zahl[i]=(u+=op1.zahl[i])%10;
					u/=10;
				}
			}
			else
			{
				erg.zahl[i]=(u+=op1.zahl[i]+op2.zahl[i])%10;
				u/=10;
			}
		}
		erg.zahl[i]=u;
		return erg;
	}

public:
	BigInt(int x)
	{
		if (x&lt;0)
		{
			vorzeichen='-';
			x=-x;
		}
		else
		{
			vorzeichen='+';
		}
		int y,i;
		y=x;
		for (i=0;y&gt;0;i++)
		{
			y/=10;
		}
		zahl=new char[len=(i &lt; 1)?1:i];
		for (y=x,i=0;y&gt;0;i++)
		{ 
			zahl[i]=y%10;
			y/=10;
		}
	}
		BigInt(char d[])
		{
			//int i=0;
			//if(d[i]);
			//for(i; d[i],m
		}
	void print (void)
	{
		int i;
		cout&lt;&lt;vorzeichen;
		for (i=len;i&gt;-1;i--)
		{
			if(zahl[i]&gt;=(char)0&amp;&amp;zahl[i]&lt;=(char)9)
				cout &lt;&lt; (char) (zahl[i]+'0');
		}
		cout&lt;&lt;endl;
	}
	friend bool operator&lt;(const BigInt &amp;a, BigInt &amp;b);

	BigInt &amp;operator+(const BigInt &amp;a)
	{
		return addiere(*this, a);
	}

};

bool operator&lt;(const BigInt &amp;a, BigInt &amp;b) //&lt;- bool friend operator &lt;(...)
		{
			int i;
			if(a.vorzeichen=='-' &amp;&amp; b.vorzeichen=='+')return true; //-&lt;+
			if(a.vorzeichen=='+' &amp;&amp; b.vorzeichen=='-')return true; //+&lt;-
			if (a.len&lt;b.len)return ('+'==a.vorzeichen)?true:false;
			if (a.len&lt;b.len)return ('+'==a.vorzeichen)?false:true;
			for(i=a.len-1; i&gt;=0; i--)
			{
				if(a.zahl[i]&lt;b.zahl[i])return ('+'==a.vorzeichen)?true:false;
				if(a.zahl[i]&gt;b.zahl[i])return ('+'==a.vorzeichen)?false:true;;
			}
			//char a[10]  V1.a[2]				char *a  V2-&gt;a[2]
			return false;
		}

int main()
{
	BigInt b1(100), b2(1),b3(-5245453),b4(&quot;  +221234567&quot;), b5=b4;
	//b1.print();
	//if (b1&lt;b2)
	b2=b1+b2;
	b2.print();
	b2=b2+b2;
	b2.print();
	cout&lt;&lt;endl;
	system(&quot;Pause&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1856130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856130</guid><dc:creator><![CDATA[Fanati_C]]></dc:creator><pubDate>Mon, 15 Feb 2010 18:52:47 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim Schreiben an Position 0x0...... on Mon, 15 Feb 2010 19:28:04 GMT]]></title><description><![CDATA[<p>gelöscht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856146</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856146</guid><dc:creator><![CDATA[JaykopX]]></dc:creator><pubDate>Mon, 15 Feb 2010 19:28:04 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim Schreiben an Position 0x0...... on Mon, 15 Feb 2010 19:32:20 GMT]]></title><description><![CDATA[<p>Fanati_C schrieb:</p>
<blockquote>
<pre><code class="language-cpp">for(i=0; (op1.len&gt;op2.len)?op1.len:op2.len; i++)
</code></pre>
</blockquote>
<p>Ich sehe nicht, wie diese Schleife terminieren könnte. Da du diesen Wert öfter brauchst, solltest du ihn vielleicht nur einmal berechnen und in einer Variablen speichern. Das fördert auch die Lesbarkeit.</p>
<pre><code class="language-cpp">if(op1.len&lt;i)
</code></pre>
<p>Diese Abfrage könnte man vor die Schleife ziehen und so Duplizität vermeiden. Du könntest zum Beispiel eine Referenz initialisieren, die auf das längere Objekt zeigt, und in Folge die Referenz statt direkt op1 bzw, op2 zu benutzen.</p>
<pre><code class="language-cpp">BigInt addiere(BigInt op1, BigInt op2)
</code></pre>
<p>Da diese Funktion kein this benötigt, gibt es keinen Grund, sie als Memberfunktion (höchstens evtl. static zu definieren).</p>
<pre><code class="language-cpp">BigInt &amp;operator+(const BigInt &amp;a)
    {
        return addiere(*this, a);
    }
</code></pre>
<p>Hier warnt der Compiler zurecht. Erstens ist das kein legales C++ und zweitens - selbst wenn es legal wäre, kannst du mit dem Funktionsergebnis nichts anfangen. Das Bigint-Objekt, das addieren (richtigerweise) zurück gibt, wird beim Verlassen der Funktion zerstört, die Referenz darauf damit ungültig.</p>
<p>Schließlich hast du ein Speicherleck und Objekte werden nicht korrekt kopiert, mit unschönen Folgen. Es müssen noch Kopierkonstruktor, Zuweisungsoperator und Destruktor implementiert werden, weil dein Objekt einen rohen Zeiger auf Speicher, der zwischen verschiedenen Objekten nicht geteilt werden sollte, verwendest.</p>
<p>Es ist möglich, ohne &gt; zu verwenden, über ein halboffenes Interval rückwärts zu iterieren</p>
<pre><code class="language-cpp">for (i=len;i!=0;)
{
    --i;
    ... Code
}
</code></pre>
<p>Diese Form ist allgemeiner und auch leicht als korrekt erkennbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856152</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 15 Feb 2010 19:32:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim Schreiben an Position 0x0...... on Mon, 15 Feb 2010 20:20:43 GMT]]></title><description><![CDATA[<p>problem gelöst</p>
<p>das mit dem return aus dem überladenen operator war wirklich nicht gut ^^<br />
hab ich dann mit hilfe einer memberfunkton mal schnell (aber nicht so schön) ma gelöst, und die for schleife im addiere is ne endlosschleife (ich depp hab das nicht gesehn)</p>
<p>danke für eure hilfe, vorallem großer dank an dich camper</p>
<p>Fanati_C</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856158</guid><dc:creator><![CDATA[Fanati_C]]></dc:creator><pubDate>Mon, 15 Feb 2010 20:20:43 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim Schreiben an Position 0x0...... on Mon, 15 Feb 2010 19:46:37 GMT]]></title><description><![CDATA[<p>Es könnte z.B. ungefähr so aussehen:</p>
<pre><code class="language-cpp">BigInt addiere(const BigInt&amp; op1, const BigInt&amp; op2)
    {
        const BigInt&amp; smaller = op1.len &lt; op2.len ? op1 : op2;
        const BigInt&amp; larger = op1.len &lt; op2.len ? op2 : op1;
        BigInt erg(0);
        erg.len = larger.len + 1;
        erg.zahl = new char[ erg.len ];
        erg.vorzeichen = '+';
        int carry = 0;
        int pos = 0;
        for ( ; pos &lt; smaller.len; ++pos )
        {
            carry += larger.zahl[ pos ] + smaller.zahl[ pos ];
            erg.zahl[ pos ] = carry % 10;
            carry /= 10;
        }
        for ( ; pos &lt; larger.len; ++pos )
        {
            carry += larger.zahl[ pos ];
            erg.zahl[ pos ] = carry % 10;
            carry /= 10;
        }
        erg[ pos ] = carry;
        return erg;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1856167</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856167</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 15 Feb 2010 19:46:37 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung beim Schreiben an Position 0x0...... on Mon, 15 Feb 2010 20:25:04 GMT]]></title><description><![CDATA[<p>cool, danke nochmal camper, das is eine super lösung, vielen vielen dank dir nochmal :-)))</p>
<p>zeile 23, erg.zahl[pos] = carry; da hast das zahl vergessen, aber das is net wichtig, funktioniert sehr gut <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/1856200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856200</guid><dc:creator><![CDATA[Fanati_C]]></dc:creator><pubDate>Mon, 15 Feb 2010 20:25:04 GMT</pubDate></item></channel></rss>