<?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[Variable bekommt nach Methodenaufruf anderen Speicherbereich zugewiesen]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe da ein kleines Problem in meinem Programm. Hier mal der Code. Ist jetzt zwar nur ein kleiner Teil der entsprechenden Funktionen aber ich denke mal das sollte reichen.</p>
<pre><code class="language-cpp">void CValueList::checkLevel(int iValue)
{
	for(int i=0; i&lt;m_listNorms.getSize(); i++)
	{
		char strValue[64];
		SNorm* currentNorm = m_listNorms.getContent(i);
[...]
		checkNorm(currentNorm, itoa(iValue, strValue, 10));
[...]
	}
}

void CValueList::checkLevel(double dValue)
{
	for(int i=0; i&lt;m_listNorms.getSize(); i++)
	{
		char strValue[64];
		SNorm* currentNorm = m_listNorms.getContent(i);
[...]
		checkNorm(currentNorm, _gcvt(dValue, 64, strValue));
[...]
	}
}

void CValueList::checkNorm(SNorm* ptrNorm, char* value)
{
	if(ptrNorm-&gt;s_dTime &gt; 0) {
		if(ptrNorm-&gt;s_bChecked) {
			if(ptrNorm-&gt;s_dTimeStart + time(NULL) &gt;= ptrNorm-&gt;s_dTime) {
				if(sendMessage(ptrNorm, value)) {
					ptrNorm-&gt;s_lWarningTime = time(NULL);
					ptrNorm-&gt;s_bWarned = true;
				}
			}
		} else {
			ptrNorm-&gt;s_dTimeStart = time(NULL);
		}
	} else {
		if(sendMessage(ptrNorm, value)) {
			ptrNorm-&gt;s_lWarningTime = time(NULL);
			ptrNorm-&gt;s_bWarned = true;
		}
	}
}
</code></pre>
<p>Es geht jetzt um die Variable currentNorm. Die bekommt aus der Liste das aktuelle Element zugewiesen. Anschließend wird die Funkrion checkNorm ausgeführt in der einige Abfragen getätigt werden. Die erste Funktion funktioniert auch wunderbar. Allerdings tritt bei der zweiten das Phänomen auf, dass die Variable currentNorm eine andere Adresse nach dem Aufruf der Funktion checkNorm hat als vorher.<br />
Im Prinzip machen die beiden ersten Funktionen fast das selbe. Der Unterschied liegt halt in den Datentypen. SNorm ist eine Struktur die eine Union enthält sodass ich jeden Datentyp in die selbe Variable speichern kann. In mehr unterscheiden sich beide Funktionen nicht.<br />
Durch sorgfältiges Debuggen bin ich zu der Erkenntnis gekommen, dass die Variable ptrNorm in der Methode checkNorm schon einen anderen Speicherbereich beinhaltet als übergeben wird. Und genau dieser Speicherbereich steht nach Ausführen der Funktion anschließend in der Variable currentNorm. Das wie gesagt aber nur bei Aufruf durch die 2. Methode.<br />
Ich hoffe ich konnte mein Problem halbwegs verständlich erläutern. Hätte da jemand eine Idee woran das liegen könnte?</p>
<p>Ich bedanke mich im Voraus schonmal für die Hilfe.</p>
<p>Gruß,<br />
Sloenig</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/236079/variable-bekommt-nach-methodenaufruf-anderen-speicherbereich-zugewiesen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 02:32:35 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/236079.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Mar 2009 15:42:40 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Variable bekommt nach Methodenaufruf anderen Speicherbereich zugewiesen on Tue, 10 Mar 2009 15:42:40 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe da ein kleines Problem in meinem Programm. Hier mal der Code. Ist jetzt zwar nur ein kleiner Teil der entsprechenden Funktionen aber ich denke mal das sollte reichen.</p>
<pre><code class="language-cpp">void CValueList::checkLevel(int iValue)
{
	for(int i=0; i&lt;m_listNorms.getSize(); i++)
	{
		char strValue[64];
		SNorm* currentNorm = m_listNorms.getContent(i);
[...]
		checkNorm(currentNorm, itoa(iValue, strValue, 10));
[...]
	}
}

void CValueList::checkLevel(double dValue)
{
	for(int i=0; i&lt;m_listNorms.getSize(); i++)
	{
		char strValue[64];
		SNorm* currentNorm = m_listNorms.getContent(i);
[...]
		checkNorm(currentNorm, _gcvt(dValue, 64, strValue));
[...]
	}
}

void CValueList::checkNorm(SNorm* ptrNorm, char* value)
{
	if(ptrNorm-&gt;s_dTime &gt; 0) {
		if(ptrNorm-&gt;s_bChecked) {
			if(ptrNorm-&gt;s_dTimeStart + time(NULL) &gt;= ptrNorm-&gt;s_dTime) {
				if(sendMessage(ptrNorm, value)) {
					ptrNorm-&gt;s_lWarningTime = time(NULL);
					ptrNorm-&gt;s_bWarned = true;
				}
			}
		} else {
			ptrNorm-&gt;s_dTimeStart = time(NULL);
		}
	} else {
		if(sendMessage(ptrNorm, value)) {
			ptrNorm-&gt;s_lWarningTime = time(NULL);
			ptrNorm-&gt;s_bWarned = true;
		}
	}
}
</code></pre>
<p>Es geht jetzt um die Variable currentNorm. Die bekommt aus der Liste das aktuelle Element zugewiesen. Anschließend wird die Funkrion checkNorm ausgeführt in der einige Abfragen getätigt werden. Die erste Funktion funktioniert auch wunderbar. Allerdings tritt bei der zweiten das Phänomen auf, dass die Variable currentNorm eine andere Adresse nach dem Aufruf der Funktion checkNorm hat als vorher.<br />
Im Prinzip machen die beiden ersten Funktionen fast das selbe. Der Unterschied liegt halt in den Datentypen. SNorm ist eine Struktur die eine Union enthält sodass ich jeden Datentyp in die selbe Variable speichern kann. In mehr unterscheiden sich beide Funktionen nicht.<br />
Durch sorgfältiges Debuggen bin ich zu der Erkenntnis gekommen, dass die Variable ptrNorm in der Methode checkNorm schon einen anderen Speicherbereich beinhaltet als übergeben wird. Und genau dieser Speicherbereich steht nach Ausführen der Funktion anschließend in der Variable currentNorm. Das wie gesagt aber nur bei Aufruf durch die 2. Methode.<br />
Ich hoffe ich konnte mein Problem halbwegs verständlich erläutern. Hätte da jemand eine Idee woran das liegen könnte?</p>
<p>Ich bedanke mich im Voraus schonmal für die Hilfe.</p>
<p>Gruß,<br />
Sloenig</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1677453</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1677453</guid><dc:creator><![CDATA[Sloenig]]></dc:creator><pubDate>Tue, 10 Mar 2009 15:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to Variable bekommt nach Methodenaufruf anderen Speicherbereich zugewiesen on Wed, 11 Mar 2009 08:42:24 GMT]]></title><description><![CDATA[<p>Wenn du einen Breakpoint beim Aufruf von checkNorm setzt und einen auf die erste Zeile in checkNorm, dann ändert sich die Adresse von currentNorm (bzw. innerhalb der Funktion ptrNorm)? Kann ich mir ehrlich gesagt schwer vorstellen. Wo sollte die neue Adresse herkommen? Du vergleichst nicht zufällig zwei Iterationen deiner for-Schleife?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1677834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1677834</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Wed, 11 Mar 2009 08:42:24 GMT</pubDate></item><item><title><![CDATA[Reply to Variable bekommt nach Methodenaufruf anderen Speicherbereich zugewiesen on Wed, 11 Mar 2009 08:57:57 GMT]]></title><description><![CDATA[<p>Hab den Fehler nun gefunden. lag an der Funktion _gcvt. Hab dort das Stringendezeichen innerhalb des strings nicht beachtet und so wurde in fremden Speicherbereich rumgefuscht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1677844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1677844</guid><dc:creator><![CDATA[Sloenig]]></dc:creator><pubDate>Wed, 11 Mar 2009 08:57:57 GMT</pubDate></item><item><title><![CDATA[Reply to Variable bekommt nach Methodenaufruf anderen Speicherbereich zugewiesen on Wed, 11 Mar 2009 08:59:37 GMT]]></title><description><![CDATA[<p>Sloenig schrieb:</p>
<blockquote>
<p>Hab den Fehler nun gefunden. lag an der Funktion _gcvt. Hab dort das Stringendezeichen innerhalb des strings nicht beachtet und so wurde in fremden Speicherbereich rumgefuscht.</p>
</blockquote>
<p>Ah ja. Wäre auch komisch gewesen. Sonst hätte ich meine Erfahrungen bzgl. Zeigern nochmal gründlich überdenken müssen... <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/1677846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1677846</guid><dc:creator><![CDATA[_matze]]></dc:creator><pubDate>Wed, 11 Mar 2009 08:59:37 GMT</pubDate></item></channel></rss>