<?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[Ungültiger Zeiger auf gelöschtes Array?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich lerne - mal wieder - C++ nach jahrzente langer Abstinenz und habe ein Problem mit - so meine Vermutung - einem Zeiger auf ein gelöschtes Array.</p>
<p>Im folgenden Beispiel habe ich eine Funktion &quot;get_Services&quot;. Diese soll ein Array von Objekten und deren Anzahl zurückgeben, wobei die Anzahl der Objekte vorher nicht bekannt ist sondern erst innerhalb der Funktion ermittelt wird.</p>
<p>Nun habe ich mir gedacht dass ich dieser Funktion einfach einen Zeiger übergebe, diese ein Array definiert und zurückgibt und als Rückgabewert die Größe des Arrays zurückgibt.</p>
<pre><code>int get_Services(CService *pServ);
</code></pre>
<p>Nun habe ich bei der Ausführung das Problem dass mein Programm bei der Konsolenausgabe in der For-Schleife - also dem versuchten Zugriff auf ein Arrayelement in main terminiert.</p>
<p>Ich vermute mal dass nach Beendigung meiner Funktion das in ihr erstellte Array schlicht nicht mehr existiert und mein Zeiger anschliessend ins Nirvana zeigt, was dann beim versuchten Zugriff misslingt, korrekt?</p>
<p>Frage: Wie löse ich das Problem richtig? Mir ist bekannt dass es mit std::vector hier bessere Alternativen gibt das zu lösen, aber auf diesem Wege ohne vector und Co. muss es doch auch funktionieren, oder liege ich hier total daneben?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string.h&gt;

class CService
{
public:
	CService();
	~CService();
	const char *ServiceName;
	void set_ServiceName(const char *Name)
	{
		ServiceName = Name;
	}
private:

};

CService::CService()
{
}

CService::~CService()
{
}

int get_Services(CService *pServ);

int main()
{

	CService *pServices = nullptr;
	get_Services(pServices);

	for (int j = 0; j &lt; 10; j++)
	{
		std::cout &lt;&lt; &quot;Service #&quot; &lt;&lt; j &lt;&lt; &quot; has: &quot; &lt;&lt; pServices[j].ServiceName &lt;&lt; std::endl;
	}
}

int get_Services(CService *pServ)
{
	pServ = new CService[10];
	for (int i = 0; i &lt; 10; i++)
	{
		CService svc;
		char *name = &quot;ServiceName&quot;;
		svc.set_ServiceName(name);
		*(pServ + i) = svc;
	}
	return 10;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/339865/ungültiger-zeiger-auf-gelöschtes-array</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 16:56:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/339865.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Oct 2016 13:19:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ungültiger Zeiger auf gelöschtes Array? on Tue, 04 Oct 2016 13:19:07 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich lerne - mal wieder - C++ nach jahrzente langer Abstinenz und habe ein Problem mit - so meine Vermutung - einem Zeiger auf ein gelöschtes Array.</p>
<p>Im folgenden Beispiel habe ich eine Funktion &quot;get_Services&quot;. Diese soll ein Array von Objekten und deren Anzahl zurückgeben, wobei die Anzahl der Objekte vorher nicht bekannt ist sondern erst innerhalb der Funktion ermittelt wird.</p>
<p>Nun habe ich mir gedacht dass ich dieser Funktion einfach einen Zeiger übergebe, diese ein Array definiert und zurückgibt und als Rückgabewert die Größe des Arrays zurückgibt.</p>
<pre><code>int get_Services(CService *pServ);
</code></pre>
<p>Nun habe ich bei der Ausführung das Problem dass mein Programm bei der Konsolenausgabe in der For-Schleife - also dem versuchten Zugriff auf ein Arrayelement in main terminiert.</p>
<p>Ich vermute mal dass nach Beendigung meiner Funktion das in ihr erstellte Array schlicht nicht mehr existiert und mein Zeiger anschliessend ins Nirvana zeigt, was dann beim versuchten Zugriff misslingt, korrekt?</p>
<p>Frage: Wie löse ich das Problem richtig? Mir ist bekannt dass es mit std::vector hier bessere Alternativen gibt das zu lösen, aber auf diesem Wege ohne vector und Co. muss es doch auch funktionieren, oder liege ich hier total daneben?</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;string.h&gt;

class CService
{
public:
	CService();
	~CService();
	const char *ServiceName;
	void set_ServiceName(const char *Name)
	{
		ServiceName = Name;
	}
private:

};

CService::CService()
{
}

CService::~CService()
{
}

int get_Services(CService *pServ);

int main()
{

	CService *pServices = nullptr;
	get_Services(pServices);

	for (int j = 0; j &lt; 10; j++)
	{
		std::cout &lt;&lt; &quot;Service #&quot; &lt;&lt; j &lt;&lt; &quot; has: &quot; &lt;&lt; pServices[j].ServiceName &lt;&lt; std::endl;
	}
}

int get_Services(CService *pServ)
{
	pServ = new CService[10];
	for (int i = 0; i &lt; 10; i++)
	{
		CService svc;
		char *name = &quot;ServiceName&quot;;
		svc.set_ServiceName(name);
		*(pServ + i) = svc;
	}
	return 10;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2510482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2510482</guid><dc:creator><![CDATA[wci]]></dc:creator><pubDate>Tue, 04 Oct 2016 13:19:07 GMT</pubDate></item><item><title><![CDATA[Reply to Ungültiger Zeiger auf gelöschtes Array? on Tue, 04 Oct 2016 13:28:09 GMT]]></title><description><![CDATA[<p>wci schrieb:</p>
<blockquote>
<p>ich lerne - mal wieder - C++ nach jahrzente langer Abstinenz und habe ein Problem mit - so meine Vermutung - einem Zeiger auf ein gelöschtes Array.</p>
</blockquote>
<p>Lies ein Buch, welches den aktuellen Standard beinhaltet.</p>
<p>std::vector ist dein Freund <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/2510483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2510483</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Tue, 04 Oct 2016 13:28:09 GMT</pubDate></item><item><title><![CDATA[Reply to Ungültiger Zeiger auf gelöschtes Array? on Tue, 04 Oct 2016 13:31:58 GMT]]></title><description><![CDATA[<p>Du änderst nur die Kopie des Zeigers (call by value &lt;=&gt; call by reference).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2510485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2510485</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 04 Oct 2016 13:31:58 GMT</pubDate></item><item><title><![CDATA[Reply to Ungültiger Zeiger auf gelöschtes Array? on Tue, 04 Oct 2016 13:51:41 GMT]]></title><description><![CDATA[<p>@manni66: Danke das war der Trick!</p>
<pre><code>int get_Services(CService *&amp;pServ)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2510490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2510490</guid><dc:creator><![CDATA[wci]]></dc:creator><pubDate>Tue, 04 Oct 2016 13:51:41 GMT</pubDate></item><item><title><![CDATA[Reply to Ungültiger Zeiger auf gelöschtes Array? on Tue, 04 Oct 2016 18:12:03 GMT]]></title><description><![CDATA[<p>daddy_felix schrieb:</p>
<blockquote>
<p>wci schrieb:</p>
<blockquote>
<p>ich lerne - mal wieder - C++ nach jahrzente langer Abstinenz und habe ein Problem mit - so meine Vermutung - einem Zeiger auf ein gelöschtes Array.</p>
</blockquote>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> Besonders Smarte Zeiger und andere wichtige Dinge aus C++11 solltest du dir anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2510538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2510538</guid><dc:creator><![CDATA[Techel]]></dc:creator><pubDate>Tue, 04 Oct 2016 18:12:03 GMT</pubDate></item></channel></rss>