<?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 Operator&amp;lt;&amp;lt;]]></title><description><![CDATA[<p>Hi,<br />
ich habe folgendes Problem, dessen Grund und Lösung mir nicht klar ist:</p>
<p>Während des Programmverlaufs befinden sich zwei Objekte A und B einer Klasse auf dem Heap, der Zugriff erfolgt also über Zeiger. Bei der Speicherzuweisung mittels <strong>new</strong> gibt es keine Probleme. Diese Objekte besitzen jeweils 2 Arrays von Zeigern auf Strings (also char **p), denen ebenfalls per <strong>new</strong> Speicher auf dem Heao zugewiesen wird. Wenn ich nun mittels Ausgabeoperator &lt;&lt; Elemente aus einem der Arrays von B ausgeben möchte (sowohl über cout als auch &quot;fout&quot; (also ofstream)), wird der Speicherinhalt eines Arrays von A überschrieben bzw. genauer der Speicher, auf den die Arrayszeiger zeigen. Wenn ich jedoch mittels printf die Array-Daten von B über die Standardausgabe ausgeben lasse, ist alles in Ordnung.</p>
<p>Meine Vermutung ist, dass es da Probleme mit dem Buffer gibt, aber keine der errorflags sind gesetzt (überprüfe ich mittels good())....und es nützt auch nichts, wenn ich sofort flush aufrufe....</p>
<p>Ich hoffe, mir kann da jemand helfen...<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/117913/probleme-mit-operator-lt-lt</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 04:31:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/117913.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Aug 2005 13:02:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Operator&amp;lt;&amp;lt; on Fri, 12 Aug 2005 13:02:37 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe folgendes Problem, dessen Grund und Lösung mir nicht klar ist:</p>
<p>Während des Programmverlaufs befinden sich zwei Objekte A und B einer Klasse auf dem Heap, der Zugriff erfolgt also über Zeiger. Bei der Speicherzuweisung mittels <strong>new</strong> gibt es keine Probleme. Diese Objekte besitzen jeweils 2 Arrays von Zeigern auf Strings (also char **p), denen ebenfalls per <strong>new</strong> Speicher auf dem Heao zugewiesen wird. Wenn ich nun mittels Ausgabeoperator &lt;&lt; Elemente aus einem der Arrays von B ausgeben möchte (sowohl über cout als auch &quot;fout&quot; (also ofstream)), wird der Speicherinhalt eines Arrays von A überschrieben bzw. genauer der Speicher, auf den die Arrayszeiger zeigen. Wenn ich jedoch mittels printf die Array-Daten von B über die Standardausgabe ausgeben lasse, ist alles in Ordnung.</p>
<p>Meine Vermutung ist, dass es da Probleme mit dem Buffer gibt, aber keine der errorflags sind gesetzt (überprüfe ich mittels good())....und es nützt auch nichts, wenn ich sofort flush aufrufe....</p>
<p>Ich hoffe, mir kann da jemand helfen...<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/850881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/850881</guid><dc:creator><![CDATA[bogeyman]]></dc:creator><pubDate>Fri, 12 Aug 2005 13:02:37 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Operator&amp;lt;&amp;lt; on Fri, 12 Aug 2005 13:15:03 GMT]]></title><description><![CDATA[<p>bogeyman schrieb:</p>
<blockquote>
<p>Meine Vermutung ist, dass es da Probleme mit dem Buffer gibt,</p>
</blockquote>
<p>Meine Vermutung ist, dass du irgendeinen Unsinn mit dem dynamischen Speicher machst. Die Wahrheit wird wohl für immer verborgen bleiben, wenn du den Code nicht rausrückst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/850893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/850893</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Fri, 12 Aug 2005 13:15:03 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Operator&amp;lt;&amp;lt; on Fri, 12 Aug 2005 13:15:31 GMT]]></title><description><![CDATA[<p>du macht irgendwas in deinem code falsch...<br />
um zu sehen was genau musst du die relevanten stellen erstmal posten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/850895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/850895</guid><dc:creator><![CDATA[Sovok]]></dc:creator><pubDate>Fri, 12 Aug 2005 13:15:31 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Operator&amp;lt;&amp;lt; on Fri, 12 Aug 2005 13:55:07 GMT]]></title><description><![CDATA[<p>nagut, hier ist der code:</p>
<pre><code class="language-cpp">class CompoundSet{
	public:
	Compound **set;		//array of pointers to all compounds in this class	
	char **descr_list;	//array of pointers to all descriptors
	char **add_prop_list;
	int no_c;		//number of compounds in the set
	int no_descr;		//number of descriptors
	int no_ap;		//number of additional properties

	CompoundSet();	//constructor
	CompoundSet(int no_compounds, int t_no_descr, int no_add_prop); //initialise new CompoundSet with no_of_compounds compounds

	~CompoundSet();	//destructor
};
</code></pre>
<p>obige Klasse beinhaltet u.a. untere nachfolgende Klasse...</p>
<pre><code class="language-cpp">class Compound{
	public:
	char name[name_length];	
	double *descr_values;
	double *add_prop;	

	Compound(char *id, int no_descr, int no_add_prop);
	~Compound();		//simple destructor
};
</code></pre>
<p>Die Konstruktoren sehen folgendermaßen aus:<br />
Für <strong>CompoundSet</strong>:</p>
<pre><code class="language-cpp">CompoundSet::CompoundSet(int no_compounds, int t_no_descr, int no_add_prop){
	no_c = no_compounds;
	no_descr = t_no_descr;
	no_ap = no_add_prop;

	set = new Compound*[no_c];
	for (int i=0;i&lt;no_c;i++){
		set[i] = new Compound(&quot;&quot;,no_descr,no_ap);		
	}
	descr_list = new char*[no_descr];
	add_prop_list = new char*[no_ap];
}
</code></pre>
<p>und für <strong>Compound</strong></p>
<pre><code class="language-cpp">Compound::Compound(char *id, int no_descr, int no_add_prop){
	strcpy(name,id);
	descr_values 	= new double[no_descr];
	add_prop 	= new double[no_add_prop];
}
</code></pre>
<p>Soo, in der main() initialisiere ich zunächst ein Objekt der Klasse CompoundSet :</p>
<pre><code class="language-cpp">CompoundSet *ac = new CompoundSet(no_ac,no_descr,no_add_prop);
</code></pre>
<p>, klappt auch alles und ich kann damit arbeiten. Das Array, welches mir nachher überschrieben wird, ist übrigens <strong>ac-&gt;descr_list</strong>.<br />
Später wird eine Methode aufgerufen, die ein Objekt der Klasee CompoundSet erzeugt..</p>
<pre><code class="language-cpp">CompoundSet *tmp_cs = new CompoundSet(1,no_descr,no_add_prop);
</code></pre>
<p>..welches nur ein Objekt der Klasse Compound beinhaltet. Anschließend werden Daten aus einer Datei in <strong>tmp_cs-&gt;set[0]-&gt;name[\b], [b]tmp_cs-&gt;set[0]-&gt;descr_values[i][\b] und [b]tmp_cs-&gt;set[0]-&gt;add_prop[0]</strong> geschrieben. Soweit, so gut...diese Daten könne mittels printf ausgegeben werden und das vorhin erwähnte Array <strong>ac-&gt;descr_list</strong> enthält noch die korrekten Daten.<br />
Ebenfalls in dieser Methode wird eine Datei mittels</p>
<pre><code class="language-cpp">ofstream fileOUT;
fileOUT.open(outputFile);
if ((void*)fileOUT==0){
	fprintf(stderr,&quot;failed to open file &lt;%s&gt;\n&quot;,outputFile);
	exit(1);}
</code></pre>
<p>zum Schreiben geöffnet. Sobald folgender Code ausgeführt wird...</p>
<pre><code class="language-cpp">fileOUT &lt;&lt;tmp_cs-&gt;set[0]-&gt;name&lt;&lt;&quot;\t&quot;;		//write compound-id and MP-FP to outputFile	
for (int i=0;i&lt;(no_descr+no_add_prop);i++){
        if (fileOUT.good()){
		if (i&lt;no_descr)
			fileOUT &lt;&lt;tmp_cs-&gt;set[0]-&gt;descr_values[i]&lt;&lt;&quot;\t&quot;;
		else
		        fileOUT &lt;&lt;tmp_cs-&gt;set[0]-&gt;add_prop[0]&lt;&lt;&quot;\t&quot;;
	}else
		printf(&quot;\nfileOUT!!!!!!!!!!!!!!!!!!\n&quot;);
	}
	fileOUT &lt;&lt;&quot;\n&quot;;
</code></pre>
<p>, steht in <strong>ac-&gt;descr_list</strong> nur noch Müll, wobei die Ausgabe <strong>fileOUT &lt;&lt;tmp_cs-&gt;set[0]-&gt;name&lt;&lt;&quot;\t&quot;;</strong> alleine noch keine Probleme verursacht. Versuche ich statt der Ausgabe mittels <strong>fileOUT &lt;&lt;</strong> das ganze mit <strong>cout &lt;&lt;</strong>, passiert dergleiche Mist. Verwende ich aber <strong>printf</strong>, ist alles in Ordnung....</p>
<p>ich hoffe, die Code-Auszüge erleichtern Eure Analyse...auf jeden Fall schonmal Danke für die schnelle Reaktion !</p>
<p>bogeyman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/850936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/850936</guid><dc:creator><![CDATA[bogeyman]]></dc:creator><pubDate>Fri, 12 Aug 2005 13:55:07 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Operator&amp;lt;&amp;lt; on Fri, 12 Aug 2005 14:22:56 GMT]]></title><description><![CDATA[<p>Und wie füllst du descr_list?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/850959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/850959</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Fri, 12 Aug 2005 14:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Operator&amp;lt;&amp;lt; on Fri, 12 Aug 2005 14:38:01 GMT]]></title><description><![CDATA[<p>in einer anderen Methode, in der ich die ausgelesenen Zeilen mittels</p>
<pre><code class="language-cpp">token = strtok(line,&quot; ,;\t&quot;);
</code></pre>
<p>parse und dann so</p>
<pre><code class="language-cpp">cs-&gt;descr_list[count_descr++] = token;
</code></pre>
<p>zuweise.</p>
<p>hmmm, sollte ich dann vielleicht lieber statt</p>
<pre><code class="language-cpp">char **descr_list;
descr_list = new char*[];
</code></pre>
<p>lieber sowas wie</p>
<pre><code class="language-cpp">char *descr_list;
descr_list = new char*[word_length];
</code></pre>
<p>machen, also ein Array von Strings fester Länge ??? Warum ist das dann solange gut gegangen ??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/850974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/850974</guid><dc:creator><![CDATA[bogeyman]]></dc:creator><pubDate>Fri, 12 Aug 2005 14:38:01 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Operator&amp;lt;&amp;lt; on Fri, 12 Aug 2005 15:22:48 GMT]]></title><description><![CDATA[<p>super, da hatte ich ja eine lange Leitung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
funktioniert jetzt...vielen Dank für die Hilfe !!</p>
<p>bis dann,</p>
<p>bogeyman</p>
]]></description><link>https://www.c-plusplus.net/forum/post/851021</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/851021</guid><dc:creator><![CDATA[bogeyman]]></dc:creator><pubDate>Fri, 12 Aug 2005 15:22:48 GMT</pubDate></item></channel></rss>