<?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[std::map find() liefert immer &amp;quot;Bad Pointer&amp;quot; ?!]]></title><description><![CDATA[<p>Hi Community,</p>
<p>ich schreibe hier gerade ein simples Programm das mir Werte in eine Map speichern soll. Das Ganze habe ich in Klassen gekapselt. Die Klasse CmdReader ist ein Singleton das die Kommandozeilen-Parameter liest. Weitere Klassen sollen dann über ein Interface der CmdReader-Klasse in der Map nach evtl. Parametern suchen können.<br />
Soweit steht auch alles, nur zur Laufzeit liefert die find() Methode immer &quot;Bad Pointer&quot;. Hier mal der Code:</p>
<pre><code class="language-cpp">// test2.cpp : Defines the entry point for the console application.
//

#include &quot;stdafx.h&quot;

// COMMAND LINE READER
class CmdReader {

private:

    static CmdReader *Instance;

	std::map&lt; char*, char* &gt; registry;

    CmdReader() {

    }

public:

    static CmdReader* GetInstance();

	void ParseCommandline( int argc, char *argv[] );

	// return value from registry by key
	float GetValueByKey( char *key );
};

CmdReader* CmdReader::Instance = NULL;

CmdReader* CmdReader::GetInstance() {

    if( Instance == NULL ) {

        Instance = new CmdReader();
    }

    return Instance;
}

void CmdReader::ParseCommandline( int argc, char *argv[] ) {

	// there must be pairs argv_n : key / argv_n+1 : value
	if( (argc % 2) != 0 )
		return;

	for( int i = 0; i &lt; argc; i += 2 )
		this-&gt;registry[ argv[i] ] = argv[i + 1];
}

float CmdReader::GetValueByKey( char *key ) {

	std::map&lt; char*, char* &gt;::iterator iter;

	iter = this-&gt;registry.find( key );
	if( iter == this-&gt;registry.end() )
		return NULL;

	return atof( iter-&gt;second );
}

class A {

private:

	int a;

public:

	A() { 

		CmdReader *reader = CmdReader::GetInstance();

		this-&gt;a = reader-&gt;GetValueByKey( &quot;-a&quot; );
	}

	~A() { }
};

class B {

private:

	int a;
	float b;

public:

	B() { 

		CmdReader *reader = CmdReader::GetInstance();

		this-&gt;a = reader-&gt;GetValueByKey( &quot;-b&quot; );
		this-&gt;b = reader-&gt;GetValueByKey( &quot;-c&quot; );
	}

	~B() { }
};

class C {

private:

	float a;

public:

	C() { 

		CmdReader *reader = CmdReader::GetInstance();

		this-&gt;a = reader-&gt;GetValueByKey( &quot;-d&quot; );
	}

	~C() { }
};

int main(int argc, char* argv[] ) {

	CmdReader *reader = CmdReader::GetInstance();

	reader-&gt;ParseCommandline( argc - 1, &amp;argv[1] );

	A *a = new A();
	B *b = new B();
	C *c = new C();

	delete a;
	delete b;
	delete c;

	return 0;
}
</code></pre>
<pre><code class="language-cpp">float CmdReader::GetValueByKey( char *key ) {

	std::map&lt; char*, char* &gt;::iterator iter;

	iter = this-&gt;registry.find( key );  &lt;--- Immer Bad Pointer!
	if( iter == this-&gt;registry.end() )
		return NULL;

	return atof( iter-&gt;second );
}
</code></pre>
<p>Könntet ihr mir da weiter helfen?</p>
<p>Lg Tobi</p>
<p>[EDIT]<br />
Die Map (registry) besitzt Werte:</p>
<p>registry [6]((0x00154cc5 &quot;-a&quot;, 0x00154cc8 &quot;1&quot;),(0x00154cca &quot;-b&quot;, 0x00154ccd &quot;2&quot;),(0x00154ccf &quot;-c&quot;, 0x00154cd2 &quot;3.23&quot;),(0x00154cd7 &quot;-d&quot;, 0x00154cda &quot;234.023&quot;),(0x00154ce2 &quot;-e&quot;, 0x00154ce5 &quot;34&quot;),(0x00a8d888 &quot;1&quot;, 0x00000000 &lt;Bad Ptr&gt;)) std::map&lt;char *,char *,std::less&lt;char *&gt;,std::allocator&lt;std::pair&lt;char * const,char *&gt; &gt; &gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293681/std-map-find-liefert-immer-quot-bad-pointer-quot</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 06:32:24 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293681.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 08 Oct 2011 12:08:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::map find() liefert immer &amp;quot;Bad Pointer&amp;quot; ?! on Sat, 08 Oct 2011 12:09:57 GMT]]></title><description><![CDATA[<p>Hi Community,</p>
<p>ich schreibe hier gerade ein simples Programm das mir Werte in eine Map speichern soll. Das Ganze habe ich in Klassen gekapselt. Die Klasse CmdReader ist ein Singleton das die Kommandozeilen-Parameter liest. Weitere Klassen sollen dann über ein Interface der CmdReader-Klasse in der Map nach evtl. Parametern suchen können.<br />
Soweit steht auch alles, nur zur Laufzeit liefert die find() Methode immer &quot;Bad Pointer&quot;. Hier mal der Code:</p>
<pre><code class="language-cpp">// test2.cpp : Defines the entry point for the console application.
//

#include &quot;stdafx.h&quot;

// COMMAND LINE READER
class CmdReader {

private:

    static CmdReader *Instance;

	std::map&lt; char*, char* &gt; registry;

    CmdReader() {

    }

public:

    static CmdReader* GetInstance();

	void ParseCommandline( int argc, char *argv[] );

	// return value from registry by key
	float GetValueByKey( char *key );
};

CmdReader* CmdReader::Instance = NULL;

CmdReader* CmdReader::GetInstance() {

    if( Instance == NULL ) {

        Instance = new CmdReader();
    }

    return Instance;
}

void CmdReader::ParseCommandline( int argc, char *argv[] ) {

	// there must be pairs argv_n : key / argv_n+1 : value
	if( (argc % 2) != 0 )
		return;

	for( int i = 0; i &lt; argc; i += 2 )
		this-&gt;registry[ argv[i] ] = argv[i + 1];
}

float CmdReader::GetValueByKey( char *key ) {

	std::map&lt; char*, char* &gt;::iterator iter;

	iter = this-&gt;registry.find( key );
	if( iter == this-&gt;registry.end() )
		return NULL;

	return atof( iter-&gt;second );
}

class A {

private:

	int a;

public:

	A() { 

		CmdReader *reader = CmdReader::GetInstance();

		this-&gt;a = reader-&gt;GetValueByKey( &quot;-a&quot; );
	}

	~A() { }
};

class B {

private:

	int a;
	float b;

public:

	B() { 

		CmdReader *reader = CmdReader::GetInstance();

		this-&gt;a = reader-&gt;GetValueByKey( &quot;-b&quot; );
		this-&gt;b = reader-&gt;GetValueByKey( &quot;-c&quot; );
	}

	~B() { }
};

class C {

private:

	float a;

public:

	C() { 

		CmdReader *reader = CmdReader::GetInstance();

		this-&gt;a = reader-&gt;GetValueByKey( &quot;-d&quot; );
	}

	~C() { }
};

int main(int argc, char* argv[] ) {

	CmdReader *reader = CmdReader::GetInstance();

	reader-&gt;ParseCommandline( argc - 1, &amp;argv[1] );

	A *a = new A();
	B *b = new B();
	C *c = new C();

	delete a;
	delete b;
	delete c;

	return 0;
}
</code></pre>
<pre><code class="language-cpp">float CmdReader::GetValueByKey( char *key ) {

	std::map&lt; char*, char* &gt;::iterator iter;

	iter = this-&gt;registry.find( key );  &lt;--- Immer Bad Pointer!
	if( iter == this-&gt;registry.end() )
		return NULL;

	return atof( iter-&gt;second );
}
</code></pre>
<p>Könntet ihr mir da weiter helfen?</p>
<p>Lg Tobi</p>
<p>[EDIT]<br />
Die Map (registry) besitzt Werte:</p>
<p>registry [6]((0x00154cc5 &quot;-a&quot;, 0x00154cc8 &quot;1&quot;),(0x00154cca &quot;-b&quot;, 0x00154ccd &quot;2&quot;),(0x00154ccf &quot;-c&quot;, 0x00154cd2 &quot;3.23&quot;),(0x00154cd7 &quot;-d&quot;, 0x00154cda &quot;234.023&quot;),(0x00154ce2 &quot;-e&quot;, 0x00154ce5 &quot;34&quot;),(0x00a8d888 &quot;1&quot;, 0x00000000 &lt;Bad Ptr&gt;)) std::map&lt;char *,char *,std::less&lt;char *&gt;,std::allocator&lt;std::pair&lt;char * const,char *&gt; &gt; &gt;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2128862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2128862</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Sat, 08 Oct 2011 12:09:57 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find() liefert immer &amp;quot;Bad Pointer&amp;quot; ?! on Sat, 08 Oct 2011 12:15:01 GMT]]></title><description><![CDATA[<p>Warum nimmst du denn dort nackte char-Pointer? Abgesehen davon, daß die Default-Vergleichsfunktion für Zeiger nicht wirklich das macht, was du erwartest, und du dich selber um die Gültigkeit kümmern mußt, ist die Arbeit mit nackten Zeigern auch deutlich instabiler. Bessere Lösung dürfte es sein, eine map&lt;string,string&gt; zu verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2128866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2128866</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 08 Oct 2011 12:15:01 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find() liefert immer &amp;quot;Bad Pointer&amp;quot; ?! on Sat, 08 Oct 2011 13:41:11 GMT]]></title><description><![CDATA[<p>Was meinst du mit nackt?</p>
<p>Lg Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2128910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2128910</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Sat, 08 Oct 2011 13:41:11 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find() liefert immer &amp;quot;Bad Pointer&amp;quot; ?! on Sat, 08 Oct 2011 13:46:37 GMT]]></title><description><![CDATA[<p>etwa soviel wie &quot;pur&quot; oder &quot;ohne Hilfsmittel&quot;. Bei einem char* mußt du selber darauf achten, ob er auf einen gültigen Wert zeigt. Außerdem mußt du C-Funktionen verwenden zum Vergleichen und Verarbeiten der Strings. Im Gegensatz dazu verpackt std::string die Zeichenkette und liefert dir komfortablen Zugriff darauf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2128916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2128916</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 08 Oct 2011 13:46:37 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find() liefert immer &amp;quot;Bad Pointer&amp;quot; ?! on Sat, 08 Oct 2011 13:52:52 GMT]]></title><description><![CDATA[<p>T0bi schrieb:</p>
<blockquote>
<p>Was meinst du mit nackt?</p>
<p>Lg Tobi</p>
</blockquote>
<p>Er meint, das du bei char-Pointern die ganze Arbeit (Memory-Management, Gültigkeit, Vergleich) selbst übernehmen musst und dir std::string die Arbeit abnimmt.</p>
<p>EDIT: Mist, zu langsam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2128919</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2128919</guid><dc:creator><![CDATA[Jonas OSDever]]></dc:creator><pubDate>Sat, 08 Oct 2011 13:52:52 GMT</pubDate></item><item><title><![CDATA[Reply to std::map find() liefert immer &amp;quot;Bad Pointer&amp;quot; ?! on Sat, 08 Oct 2011 14:20:05 GMT]]></title><description><![CDATA[<p>Ok, danke. Ich hab jetzt std::string genommen, damit geht es.</p>
<p>Lg Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2128933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2128933</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Sat, 08 Oct 2011 14:20:05 GMT</pubDate></item></channel></rss>