<?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[Speicherüberschreibung?]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich habe das Problem, das mir mein Programm kurz vor einer &quot;cout&quot; Sequent den Fehler</p>
<blockquote>
<p>&quot;The instruction at &quot;0x785718a8&quot; referenced memory at &quot;0x65746e49&quot;. The memory could not be &quot;read&quot;.&quot;</p>
</blockquote>
<p>ausgibt.</p>
<p>Dravere meinte hier( <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1887296.html#1887296" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1887296.html#1887296</a> ) dass es dies auftreten könnte, wenn ich den Speicher überschreibe.</p>
<p>Ich finde den Fehler jedoch nicht, kann mir aber denken dass es sich bei der Vektor Kopierung um ein solchen Fall handeln könnte.</p>
<pre><code class="language-cpp">VOID LoadLanguage(string sPath)
{
	cout &lt;&lt; &quot;Load routine started...&quot; &lt;&lt; endl;

	ifstream fHandle; // Textfile Handle
	string LineBuffer; // Buffer
	vector&lt;vector&lt;string&gt;&gt; vData;	//2 dimensional matrix where the data of the textfile will be stored.

	int VectorIndex = 0;	// Line Index

	HWND TestHandle = NULL;

	fHandle.open(sPath.c_str(), ios::in); // Open the language file

	while(getline(fHandle, LineBuffer))
	{
		vector&lt;string&gt; Token;
		Tokenize(LineBuffer, Token); // Split each line in single words
		/**** DBG ****/
		for(int Idx=0;Idx&lt;5;Idx++)
		{
			cout &lt;&lt; &quot;\ t [&quot; &lt;&lt; Token[Idx] &lt;&lt; &quot;]&quot; &lt;&lt; endl; 
		}
		/** DBG END **/
		vData.push_back(Token);
	}

	fHandle.close();

	// Stored every line - splitted in single words - in vData

	for(int outerloop=0;outerloop&lt;vData.size();outerloop++)
	{
		if (TestHandle!=NULL)
			break;

		for(int innerloop=0;innerloop&lt;vData[outerloop].size();innerloop++)
		{
			// Get the Window Handle
			TestHandle = FindWindow(NULL, (LPCSTR)vData[outerloop][innerloop].c_str());
			cout &lt;&lt; vData[outerloop][innerloop] &lt;&lt; endl;
			cout &lt;&lt; TestHandle &lt;&lt; endl;
			if (TestHandle != NULL)
			{
				// store the data into the global string vector
				Titel.resize(vData[outerloop].size());
				copy(vData[outerloop].begin(), vData[outerloop].end(), Titel.begin());
				break;
			}
		}
	}
</code></pre>
<p>Kann mir jemand weiter helfen?</p>
<p>Gruss,<br />
fiorn</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265606/speicherüberschreibung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 15:44:13 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265606.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 26 Apr 2010 08:45:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherüberschreibung? on Mon, 26 Apr 2010 08:45:30 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich habe das Problem, das mir mein Programm kurz vor einer &quot;cout&quot; Sequent den Fehler</p>
<blockquote>
<p>&quot;The instruction at &quot;0x785718a8&quot; referenced memory at &quot;0x65746e49&quot;. The memory could not be &quot;read&quot;.&quot;</p>
</blockquote>
<p>ausgibt.</p>
<p>Dravere meinte hier( <a href="http://www.c-plusplus.net/forum/viewtopic-var-p-is-1887296.html#1887296" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-p-is-1887296.html#1887296</a> ) dass es dies auftreten könnte, wenn ich den Speicher überschreibe.</p>
<p>Ich finde den Fehler jedoch nicht, kann mir aber denken dass es sich bei der Vektor Kopierung um ein solchen Fall handeln könnte.</p>
<pre><code class="language-cpp">VOID LoadLanguage(string sPath)
{
	cout &lt;&lt; &quot;Load routine started...&quot; &lt;&lt; endl;

	ifstream fHandle; // Textfile Handle
	string LineBuffer; // Buffer
	vector&lt;vector&lt;string&gt;&gt; vData;	//2 dimensional matrix where the data of the textfile will be stored.

	int VectorIndex = 0;	// Line Index

	HWND TestHandle = NULL;

	fHandle.open(sPath.c_str(), ios::in); // Open the language file

	while(getline(fHandle, LineBuffer))
	{
		vector&lt;string&gt; Token;
		Tokenize(LineBuffer, Token); // Split each line in single words
		/**** DBG ****/
		for(int Idx=0;Idx&lt;5;Idx++)
		{
			cout &lt;&lt; &quot;\ t [&quot; &lt;&lt; Token[Idx] &lt;&lt; &quot;]&quot; &lt;&lt; endl; 
		}
		/** DBG END **/
		vData.push_back(Token);
	}

	fHandle.close();

	// Stored every line - splitted in single words - in vData

	for(int outerloop=0;outerloop&lt;vData.size();outerloop++)
	{
		if (TestHandle!=NULL)
			break;

		for(int innerloop=0;innerloop&lt;vData[outerloop].size();innerloop++)
		{
			// Get the Window Handle
			TestHandle = FindWindow(NULL, (LPCSTR)vData[outerloop][innerloop].c_str());
			cout &lt;&lt; vData[outerloop][innerloop] &lt;&lt; endl;
			cout &lt;&lt; TestHandle &lt;&lt; endl;
			if (TestHandle != NULL)
			{
				// store the data into the global string vector
				Titel.resize(vData[outerloop].size());
				copy(vData[outerloop].begin(), vData[outerloop].end(), Titel.begin());
				break;
			}
		}
	}
</code></pre>
<p>Kann mir jemand weiter helfen?</p>
<p>Gruss,<br />
fiorn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888344</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Mon, 26 Apr 2010 08:45:30 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherüberschreibung? on Mon, 26 Apr 2010 09:00:18 GMT]]></title><description><![CDATA[<p>1. Der Debugger kann viel besser debuggen als Leute in einem Forum.<br />
2. Zeile 20: Bist du sicher, dass dort auch wirklich immer mind. 5 Elemente im Vektor stehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888359</guid><dc:creator><![CDATA[Nukularfüsiker]]></dc:creator><pubDate>Mon, 26 Apr 2010 09:00:18 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherüberschreibung? on Mon, 26 Apr 2010 09:05:05 GMT]]></title><description><![CDATA[<p>Nukularfüsiker schrieb:</p>
<blockquote>
<p>2. Zeile 20: Bist du sicher, dass dort auch wirklich immer mind. 5 Elemente im Vektor stehen?</p>
</blockquote>
<p>Witzig, habe ihn schon im letzten Thread darauf hingewiesen <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 />
Ich füge noch ein 3. dazu:<br />
Der Speicherfehler muss nicht in der Funktion <code>LoadLanguage</code> geschehen, er kann irgendwo im Programm auftauchen. Das ist ja auch das heimtückische an solchen Fehlern.<br />
Ich würde mich allerdings aktuell mal auf den Bereich vor <code>LoadLanguage</code> und darin beschränken. Also fehlt noch einiges an Code, welchen du uns noch nicht gezeigt hast: <code>Tokenize</code> und den Bereich vor <code>LoadLanguage</code> .</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888362</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 26 Apr 2010 09:05:05 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherüberschreibung? on Mon, 26 Apr 2010 10:49:12 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ja, es sind immer 5 Elemente im Vektor, bzw. sollten drin sein. <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>Tokeinze:</p>
<pre><code class="language-cpp">VOID Tokenize(const string&amp; str, vector&lt;string&gt;&amp; tokens, const string&amp; delimiters)
{
    // Skip delimiters at beginning.
    string::size_type lastPos = str.find_first_not_of(delimiters, 0);
    // Find first &quot;non-delimiter&quot;.
    string::size_type pos     = str.find_first_of(delimiters, lastPos);
	int i = 0;

    while (string::npos != pos || string::npos != lastPos)
    {
        // Found a token, add it to the vector.
		//cout &lt;&lt; str &lt;&lt; endl;
		//cout &lt;&lt; str.substr(lastPos, pos - lastPos) &lt;&lt; endl;
        tokens.push_back(str.substr(lastPos, pos - lastPos));
		//cout &lt;&lt; tokens[i++] &lt;&lt; endl;
        // Skip delimiters.  Note the &quot;not_of&quot;
        lastPos = str.find_first_not_of(delimiters, pos);
        // Find next &quot;non-delimiter&quot;
        pos = str.find_first_of(delimiters, lastPos);
    }
}
</code></pre>
<p>Vor LoadLanguage() ist ansich nichts interessantens ausser dem Auslesen ob der Prozess läuft und das Auslesen des Language Pfades.</p>
<p>Vielleicht ein Entscheidender &quot;Hinweis&quot;.<br />
Alle strings im Vektor bestehen immer nur aus einem Wort.<br />
Ausser der eine String, bei dem es crasht. - Dieser bestehst aus 3 Wörtern.</p>
<p>Gruss,<br />
fiorn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888409</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Mon, 26 Apr 2010 10:49:12 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherüberschreibung? on Mon, 26 Apr 2010 14:49:19 GMT]]></title><description><![CDATA[<p>Lass dir mal im Debugger oder per cout nach der Funktion Tokenize() die Größe des Vektors Token ausgeben, nur um sicherzugehen.</p>
<p>Nebenbei, arbeitet dein Programm in einem Thread oder mehreren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888513</guid><dc:creator><![CDATA[hmpf]]></dc:creator><pubDate>Mon, 26 Apr 2010 14:49:19 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherüberschreibung? on Tue, 27 Apr 2010 06:58:30 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Token.size() beträgt nach jedem 'Tokenize()' 5.<br />
Mein Programm arbeitet in nur einem Thread.</p>
<p>Das Problem mit dem debuggen ist, dass dieses Programm dann auf einer VMWare getestet werden muss, und da kein VS installiert ist.</p>
<p>Gruss,<br />
fiorn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888783</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Tue, 27 Apr 2010 06:58:30 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherüberschreibung? on Tue, 27 Apr 2010 07:19:40 GMT]]></title><description><![CDATA[<p>Hau doch erst mal in <code>LoadLanguage</code> all das raus, was du bis dahin eh nicht brauchst und guck, was passiert - dann noch nen paar Debug-Ausgaben mehr und dann weist du zumindest schon mal ohne Debugger halbwegs, wo es crasht...</p>
<p>An dem cout an sich sieht aber auch noch bissl was komisch aus:<br />
<code>&quot;\ t&quot;</code><br />
Ich weiß nicht, was der Compiler bei einer ungültigen Escape-Sequenz machen darf und was nicht, aber ich würd das Leerzeichen zwischen '\' und 't' auf jeden Fall wegmachen</p>
<p>Auch wenn du dir sicher bist, dass immer 5 Elemente in dem vector sind, kannst du ja mal das hier aus der Schleife machen:</p>
<pre><code class="language-cpp">for(vector&lt;string&gt;::const_iterator i(Token.begin()), e(Token.end()); i != e; ++i)
  std::cout &lt;&lt; &quot;\t [&quot; &lt;&lt; *i &lt;&lt; ']' &lt;&lt; std::endl;
</code></pre>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888794</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 27 Apr 2010 07:19:40 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherüberschreibung? on Tue, 27 Apr 2010 07:38:53 GMT]]></title><description><![CDATA[<p>Hi unskilled,</p>
<p>Ja, es sind tatsächlich immer 5 Einträge im Vector 'Titel' vorhanden.<br />
Aber ich wundere mich immernoch, warum dass das Programm nur dann crasht, wenn in dem Begriff mehr als 1 Wort (sprich es beinhaltet Leerzeichen) vorhanden sind.</p>
<p>Ich habe mich nun an einem kleinen Workaround versucht und anstatt der copy() Methode ein einfaches push_back gemacht:</p>
<pre><code class="language-cpp">for each(string s in vData[outerloop])
				{
					Titel.push_back(s);
					cout &lt;&lt; s &lt;&lt; endl;
				}
</code></pre>
<p>In der eigentlichen Methode werden die Daten dem Vektor auch erfolgreich hinzugefügt.<br />
Rufe ich den Inhalt jedoch in der Main-Methode ab, so ist der Inhalt von &quot;Titel&quot; leer. - Und das obwohl Titel global ist.</p>
<p>Wo liegt mein Denkfehler?</p>
<p>Gruss,<br />
fiorn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888805</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Tue, 27 Apr 2010 07:38:53 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherüberschreibung? on Tue, 27 Apr 2010 10:54:13 GMT]]></title><description><![CDATA[<p>Zeig doch mal bisschen Code</p>
<p>Zumindest die deklaration, initialisierung und die fkt., die schreibend darauf zugreift und die, die lesend darauf zugreift.</p>
<p>bitte poste nicht wieder 50zeilige Funktionen, wenn es auch 10 tun, weil die anderen Zeilen unbedeutend für dieses Problem sind.</p>
<p>Wieso machst du das kopieren so kompliziert?<br />
<code>Titel = vData[outerLoop];</code><br />
wäre wohl zu übersichtlich?</p>
<p>Sicher, dass das TestHandle-Zeugs alles richtig läuft?</p>
<p>Und wenns das nicht war und das nächste mal nicht deutlich mehr debug-Ausgaben in deinem Code zu sehen sind und du auch die Ausgabe des Programms mitpostet, hab ich die Lust dann ganz verloren... (die erwartete / erhoffte Ausgabe natürlich auch mit)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888881</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 27 Apr 2010 10:54:13 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherüberschreibung? on Tue, 27 Apr 2010 12:23:46 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Also, ich habe das ganze nun so umgebaut dass nur noch ein einziger Vektor benötigt wird, dieser jedoch einfach global ausserhalb des main deklariert wird.<br />
Dazu noch einen Integer der mir dann die richtige Zeile der Sprachdatei angibt</p>
<pre><code class="language-cpp">vector&lt;vector&lt;string&gt;&gt; vData;
int DataIndex;
</code></pre>
<p>Der Anfang des Programmes ist für euch wohl eher unwichtig.<br />
Es wird nur der Pfad der Sprachdatei gesucht und darauf gewartet dass ein bestimmter Prozess läuft:</p>
<pre><code class="language-cpp">string sExePath = argv[0];
	int Idx = sExePath.find_last_of(&quot;\\&quot;);
	string sLanguagePath = sExePath.substr(0, Idx);
	sLanguagePath.append(&quot;\\language.txt&quot;);

	while (!ProcessIsRunning()){
		printf(&quot;.&quot;);
		Sleep(SLEEPTIME_LOOP);
	}
</code></pre>
<p>Danach wird dem DataIndex die gewünschte Spalte zurückgegeben mittels der Funktion &quot;LoadLanguage(string)&quot;:</p>
<pre><code class="language-cpp">DataIndex = LoadLanguage(sLanguagePath);
</code></pre>
<p>Die Funktion kennt ihr ja bereits bestens. <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 />
Die Funktion liest einfach alle Begriffe in einer Textdatei aus (pro Zeile 5 Begriffe - alle ausser dem Problembegriff bestehen aus EINEM Wort - , getrennt mit Semikolon.<br />
Danach läuft das Programm in einer Schleife alle Wörter durch und schaut, mittels welchem Wort man ein gültiges WindowHandle bekommt -&gt; Diese Zeile ist dann die benutzte Sprache im Programm.</p>
<pre><code class="language-cpp">/* Das einlesen der Datei habe ich jetzt nicht drin -&gt; funktioniert fehlerfrei und ist oben bereits drin */
	for(int outerloop=0;outerloop&lt;vData.size();outerloop++)
	{
		if (TestHandle!=NULL)
			break;

		for(int innerloop=0;innerloop&lt;vData[outerloop].size();innerloop++)
		{
			// Get the Window Handle
			TestHandle = FindWindow(NULL, (LPCSTR)vData[outerloop][innerloop].c_str());
			cout &lt;&lt; vData[outerloop][innerloop] &lt;&lt; endl;
			cout &lt;&lt; TestHandle &lt;&lt; endl;
			if (TestHandle != NULL)
			{
				// Gives the Index back, where the valid language is stored.
				return outerloop;
			}
		}
	}
</code></pre>
<p>Mittels dem Index des VektorArrays kann mit dem Programm nun immer bestimmt werden, auf welcher &quot;Seite&quot; sich das externe Programm befindet (da jede &quot;Seite&quot; einen anderen Titel hat).</p>
<p>So, das ganze funktioniert auch 1A nur bei dem einen Begriff, welcher aus 3 Wörtern besteht: &quot;Interventi di servizio&quot;).</p>
<p>Ich hoffe das sind vorerst mal genug detailierte Informationen. <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>Gruss,<br />
fiorn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1888939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1888939</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Tue, 27 Apr 2010 12:23:46 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherüberschreibung? on Mon, 03 May 2010 08:52:40 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>weiss niemand Rat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1891615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891615</guid><dc:creator><![CDATA[fiorn]]></dc:creator><pubDate>Mon, 03 May 2010 08:52:40 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherüberschreibung? on Mon, 03 May 2010 12:13:13 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Und wenns das nicht war und das nächste mal nicht deutlich mehr debug-Ausgaben in deinem Code zu sehen sind und du auch die Ausgabe des Programms mitpostet, hab ich die Lust dann ganz verloren... (die erwartete / erhoffte Ausgabe natürlich auch mit)</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1891711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1891711</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 03 May 2010 12:13:13 GMT</pubDate></item></channel></rss>