<?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[Probleme mit Speicherung von struct in Containerklasse]]></title><description><![CDATA[<p>Hi,</p>
<p>ich programmiere derzeit an einem Programm in dem ich zur Laufzeit ständig strings speichern und abrufen muss/möchte. Ich wollte dies mit einer globalen Containerklasse wie z.b. std:list&lt;&gt; lösen. Dazu hab ich in der main.cpp erstmal mein struct definiert, welches ich speichern möchte und eine liste ebenjener structs definiert. Und jetzt möchte ich in blubb.cpp das struct zur Laufzeit füllen und an die liste dauerhaft anhängen. Soweit so gut, funktioniert erstmal soweit. Mein Problem ist nun sobald ich in blubb.cpp mein listingstruct ändere und an die liste anhänge, ändern sich alle bereits vorhandenen Einträge zu ebenjenen Eintrag. D.h. sämtliche bisherigen Einträge in der Liste sind identisch zum letzten Eintrag. Gebe ich den Speicher zu listingstruct wieder frei, werden die Einträge in der Liste auch gelöscht. Ist natürlich klar, weil überall der Zeiger auf denselben Speicherbereich drinne steht. Mein Frage ist nun, wie kann ich das evtl. (anders) lösen, das alle Elemente so bleiben wie sie sind? Ich habe vermutlich das Grundprinzip noch nicht verstanden und bitte etwas um Nachsicht, man lernt jeden Tag was Neues dazu. <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>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;list&gt;

struct LISTING
{
	std::string name;
	std::string listings;
};

std::list&lt;LISTING *&gt; newlist;

int main(int argc, char **args)
{
}
</code></pre>
<p>blubb.cpp</p>
<pre><code class="language-cpp">#include &lt;list&gt;

extern struct LISTING
{
	std::string name;
	std::string listings;
};
extern std::list&lt;LISTING *&gt; newlist;

[...]

int *Blubb::createParse(Lala::DIR *directory)
{
std::string Listing, Listing1;

LISTING *listingstruct = new LISTING;

if (newlist.empty())
		{
			listingstruct-&gt;name = &quot;&quot;;
			listingstruct-&gt;listings = &quot;&quot;;
			newlist.push_back(listingstructstruct);
		}

		for (std::list&lt;LISTING *&gt;::iterator i = newlist.begin(); i != newlist.end(); i++)
		{
			listingstruct = *i;

			if ((listingstruct-&gt;name == directory-&gt;dir-&gt;path + directory-&gt;name) &amp;&amp; (listingstruct-&gt;listings != &quot;&quot;))
			{
				Listing1 = listingstruct-&gt;listings;
			}
			else
			{
				Listing1 = loadFile(directory-&gt;dir-&gt;path + directory-&gt;name, Listing);

				listingstruct-&gt;name = directory-&gt;dir-&gt;path + directory-&gt;name;
				listingstruct-&gt;listings = Listing1;
				newlist.push_back(listingstruct);
			}
		}
}
//delete listingstruct;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/179419/probleme-mit-speicherung-von-struct-in-containerklasse</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 06:20:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/179419.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Apr 2007 13:02:23 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Speicherung von struct in Containerklasse on Sat, 21 Apr 2007 13:02:23 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich programmiere derzeit an einem Programm in dem ich zur Laufzeit ständig strings speichern und abrufen muss/möchte. Ich wollte dies mit einer globalen Containerklasse wie z.b. std:list&lt;&gt; lösen. Dazu hab ich in der main.cpp erstmal mein struct definiert, welches ich speichern möchte und eine liste ebenjener structs definiert. Und jetzt möchte ich in blubb.cpp das struct zur Laufzeit füllen und an die liste dauerhaft anhängen. Soweit so gut, funktioniert erstmal soweit. Mein Problem ist nun sobald ich in blubb.cpp mein listingstruct ändere und an die liste anhänge, ändern sich alle bereits vorhandenen Einträge zu ebenjenen Eintrag. D.h. sämtliche bisherigen Einträge in der Liste sind identisch zum letzten Eintrag. Gebe ich den Speicher zu listingstruct wieder frei, werden die Einträge in der Liste auch gelöscht. Ist natürlich klar, weil überall der Zeiger auf denselben Speicherbereich drinne steht. Mein Frage ist nun, wie kann ich das evtl. (anders) lösen, das alle Elemente so bleiben wie sie sind? Ich habe vermutlich das Grundprinzip noch nicht verstanden und bitte etwas um Nachsicht, man lernt jeden Tag was Neues dazu. <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>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &lt;list&gt;

struct LISTING
{
	std::string name;
	std::string listings;
};

std::list&lt;LISTING *&gt; newlist;

int main(int argc, char **args)
{
}
</code></pre>
<p>blubb.cpp</p>
<pre><code class="language-cpp">#include &lt;list&gt;

extern struct LISTING
{
	std::string name;
	std::string listings;
};
extern std::list&lt;LISTING *&gt; newlist;

[...]

int *Blubb::createParse(Lala::DIR *directory)
{
std::string Listing, Listing1;

LISTING *listingstruct = new LISTING;

if (newlist.empty())
		{
			listingstruct-&gt;name = &quot;&quot;;
			listingstruct-&gt;listings = &quot;&quot;;
			newlist.push_back(listingstructstruct);
		}

		for (std::list&lt;LISTING *&gt;::iterator i = newlist.begin(); i != newlist.end(); i++)
		{
			listingstruct = *i;

			if ((listingstruct-&gt;name == directory-&gt;dir-&gt;path + directory-&gt;name) &amp;&amp; (listingstruct-&gt;listings != &quot;&quot;))
			{
				Listing1 = listingstruct-&gt;listings;
			}
			else
			{
				Listing1 = loadFile(directory-&gt;dir-&gt;path + directory-&gt;name, Listing);

				listingstruct-&gt;name = directory-&gt;dir-&gt;path + directory-&gt;name;
				listingstruct-&gt;listings = Listing1;
				newlist.push_back(listingstruct);
			}
		}
}
//delete listingstruct;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1270574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270574</guid><dc:creator><![CDATA[buggybear]]></dc:creator><pubDate>Sat, 21 Apr 2007 13:02:23 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Speicherung von struct in Containerklasse on Sat, 21 Apr 2007 13:06:13 GMT]]></title><description><![CDATA[<p>Du kannst auch eine 'list&lt;LISTING&gt;' anlegen (ohne den *), dann speichert die Liste bei jedem push-back eine Kopie deines struct's. (und um die Freigabe des Speichers kümmert sie sich dann auch selber)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270575</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 21 Apr 2007 13:06:13 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Speicherung von struct in Containerklasse on Sat, 21 Apr 2007 17:39:03 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Du kannst auch eine 'list&lt;LISTING&gt;' anlegen (ohne den *), dann speichert die Liste bei jedem push-back eine Kopie deines struct's. (und um die Freigabe des Speichers kümmert sie sich dann auch selber)</p>
</blockquote>
<p>Danke, hat funktioniert! <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="🙂"
    /> Rein interessehalber, was müsste ich denn noch machen damit die &quot;list&lt;LISTING *&gt;&quot; Methode funktioniert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1270735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1270735</guid><dc:creator><![CDATA[buggybea]]></dc:creator><pubDate>Sat, 21 Apr 2007 17:39:03 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Speicherung von struct in Containerklasse on Mon, 23 Apr 2007 06:25:56 GMT]]></title><description><![CDATA[<p>Bei jedem Schleifendurchlauf neuen Speicher per new anfordern - und am Programmende die gesamte Liste durchlaufen und ihren Speicher wieder freigeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1271471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1271471</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 23 Apr 2007 06:25:56 GMT</pubDate></item></channel></rss>