<?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[Anfängerproblem FIFO-Queue]]></title><description><![CDATA[<p>danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/123087/anfängerproblem-fifo-queue</link><generator>RSS for Node</generator><lastBuildDate>Sun, 23 Aug 2026 11:26:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/123087.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Oct 2005 19:26:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Thu, 13 Oct 2005 09:52:45 GMT]]></title><description><![CDATA[<p>danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/890896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890896</guid><dc:creator><![CDATA[BlueDolphin]]></dc:creator><pubDate>Thu, 13 Oct 2005 09:52:45 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Thu, 13 Oct 2005 01:11:42 GMT]]></title><description><![CDATA[<p>edit: erstmal weggenommen, wegen neuerlicher bedenken, dass ich deine hausgaben mache.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890933</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890933</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Thu, 13 Oct 2005 01:11:42 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Wed, 12 Oct 2005 22:06:28 GMT]]></title><description><![CDATA[<p>schon wieder hausaufgaben für jemanden gemacht?<br />
gut so! fein so!</p>
<p>ich bitte darum, daß ihr als leser und beantworter nicht immer den pädagogischen lümmel heraushängen laßt. der neuling lernt auch, indem er eine hier gelöste aufgabe aufbereitet, um die seinem lehrer/prof vorzustellen. nee, er lernt sogar, wenn er nicht vorstellen muß. er ist ja interessiert am ergebnis. nur ganz ganz ganz selten will der frager die antwort gar nicht selber wissen.</p>
<p>und bitte verzeiht den asozialen in dieser hinsicht (und da gehöre ich auch manchmal dazu, weil ich gar nicht den kern des problems sehe), wenn sie kacke labern. laßt uns an sich, wenn keine weiteren daten über den frager da sind, davon ausgehen, daß er genauso ist wie wir als wir anfingen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890947</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 12 Oct 2005 22:06:28 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Thu, 13 Oct 2005 01:16:39 GMT]]></title><description><![CDATA[<p>na das sagt ja der richtige.<br />
du löscht doch hier manchmal postings ohne weiteren begründung. wieso fällt es dir da so schwer dann diesen thread hier zu schließen? sei bitte etwas konsequenter, was die handhabung unangebrachter posting und threads angeht, anstatt mich anzuflamen, denn im endeffekt ist es immer noch meine entscheidung, ob ich jemandem antworte oder nicht!</p>
<p>ich habe jetzt erstmal meine lösung vorläufig gelöscht, weil ich nach erneutem lesen des ersten postings auch meine zweifel bekommen habe.</p>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/890993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/890993</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Thu, 13 Oct 2005 01:16:39 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Thu, 13 Oct 2005 05:52:43 GMT]]></title><description><![CDATA[<p>terraner schrieb:</p>
<blockquote>
<p>na das sagt ja der richtige.<br />
du löscht doch hier manchmal postings ohne weiteren begründung.</p>
</blockquote>
<p>das der fall.</p>
<blockquote>
<p>wieso fällt es dir da so schwer dann diesen thread hier zu schließen?</p>
</blockquote>
<p>weil ich es gut finde, daß geholfen wird, weil du keine scheiße laberst, weil die fragestellung nett war.</p>
<blockquote>
<p>sei bitte etwas konsequenter, was die handhabung unangebrachter posting und threads angeht,</p>
</blockquote>
<p>noch mehr löschen? da werd ich ja arbeitskrank von. nee, ich will nur ein postings pro monat löschen müssen. zur not, indem ich bei gelegenheit ein wenig mehr arbeit investieren, damit sich trolle hier nicht so toll wohlfühlen.<br />
ok, zur zeit sind einige querpostings hier, die in ein anderes subforum gehören. hab viele dagelassen, weil ich vom löschen ganz erschöpft bin. <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>
<blockquote>
<p>anstatt mich anzuflamen, denn im endeffekt ist es immer noch meine entscheidung, ob ich jemandem antworte oder nicht!</p>
</blockquote>
<p>ah, mißverständnis. ich hab dich gar nicht angeflamed. in dem posting von mir war null ironie. muß wohl in zukunft &lt;keine ironie&gt;-tags setzen, wenn ich mal applaudiere (was zugegebenermaßen zu selten ist). ich wünsche es echt, daß weniger offensichtliche freizeitpädagogik betrieben wird, sondern mehr geholfen. wer jemanden beeinflussen will, muß das eh unter der gürtelline tun, subversiv, schleichend, versteckt, nachhaltig und konsequent. das ist aber auch jedem antworter seine eigene entscheidung, wie weit er es treibt. ein paar leichte funktionen auslassen finde ich gut. oder tippfehler machen. nur ein &quot;denk selber nach!&quot; zu posten finde ich nicht gut. das ärgert den frager nur und bringt keinen weiter.</p>
<blockquote>
<p>ich habe jetzt erstmal meine lösung vorläufig gelöscht, weil ich nach erneutem lesen des ersten postings auch meine zweifel bekommen habe.<br />
mfg</p>
</blockquote>
<p>supi. daß sie nur vorläufig gelöscht ist. das interpretiere ich so, daß du ne kopie auf platte hast. stell sie bitte wieder rein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/891016</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891016</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 13 Oct 2005 05:52:43 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Thu, 13 Oct 2005 06:54:05 GMT]]></title><description><![CDATA[<p>Args, der Quellcode dort sieht ja grauenvoll aus. Bist du sicher, daß der (a) ohne Fehlermeldungen compiliert und (b) das richtige macht? Und warum nutzt du, wenn du schon in C++ unterwegs bist, nicht das Klassenkonzept (Init wäre Konstruktor, die übrigen Funktionen Methoden von Stapel)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/891052</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891052</guid><dc:creator><![CDATA[CS]]></dc:creator><pubDate>Thu, 13 Oct 2005 06:54:05 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Thu, 13 Oct 2005 11:42:24 GMT]]></title><description><![CDATA[<p>CS schrieb:</p>
<blockquote>
<p>Args, der Quellcode dort sieht ja grauenvoll aus. Bist du sicher, daß der (a) ohne Fehlermeldungen compiliert und (b) das richtige macht? *(c)*Und warum nutzt du, wenn du schon in C++ unterwegs bist, nicht das Klassenkonzept (Init wäre Konstruktor, die übrigen Funktionen Methoden von Stapel)?</p>
</blockquote>
<p>(a) Ja.<br />
(b) Jetzt schon. Ich musste noch einen Bug beseitigen.<br />
(c) Weil er schon mit structs angefangen hat und ich es wichtiger fand erstmal sein Problem im bekannten Stil zu lösen.</p>
<p>fifo.hpp</p>
<pre><code class="language-cpp">#ifndef FIFO_HPP
#define FIFO_HPP

// Das gehört in einen Header
struct Header // C-Style-Deklaration gelöscht
{
  int* data; //Zeiger auf Int // schlechter Kommentar. man sieht doch, was das ist.
  //int top, bottom, count, size;
  // wofür brauche ich denn das? ich sehe da nur bedarf für size, top oder count
  int size, top;
};

typedef Header* Stapel; // C-Style-Deklaration gelöscht
// IMO ist es schlecht Zeiger so zu verbergen
// wer denkt jetzt noch daran, dass man den Stapel deleten muss?

Stapel Init    (int size); // variablennamen werden klein geschrieben
void   Push    (Stapel s, int x); // schlechter int-name. was ist x?
int    Pop     (Stapel s);
bool   IsEmpty (Stapel s); // bool. das hier ist nicht prä-ansi c.
void   Dispose (Stapel s);

#endif
</code></pre>
<p>fifo.cpp</p>
<pre><code class="language-cpp">#include &lt;cstdlib&gt;
#include &quot;fifo.hpp&quot;

Stapel Init(int size)
{
   Stapel s;
   s = new Header; //S = Zeiger auf Header // Böses typedef, wie ich bereits sagte.
   s-&gt;data = new int[size];
   s-&gt;size = size;
   s-&gt;top = 0;
   return s;
}

void Push(Stapel s, int x) // für &quot;x&quot; besser &quot;value&quot; oder soetwas nehmen
{
	// Abfrage, ob Stack voll ist, fehlt
	if(s-&gt;top == s-&gt;size)
	{
		delete [] s; // hm...
		// ich schmeiss lieber keine exceptions in c-code.
		// aber ich kann auch keine mit dem rückgabe-wert anzeigen...
		s-&gt;data[std::rand()] = 0;
	}

   s-&gt;data[s-&gt;top++] = x; // schön kompakt gelöst
   //s-&gt;data[top] = x;
   //top = (top+1)%ize;
}

int Pop(Stapel s)
{
	// hier fehlt eigentlich auch die abfrage
	/* if(top)
	**      return s-&gt;data[s-&gt;top--];
	** else
	** 		...
	*/
   return s-&gt;data[--s-&gt;top]; // fast so schön wie die push-funktion.
}

bool IsEmpty (Stapel s)
{
   return (s-&gt;top == 0); // Wunderschön.
}

void Dispose (Stapel s)
{
   delete [] s-&gt;data;
   //delete s; // warum den zeiger selbst deleten?
}
</code></pre>
<p>fifo-main.cpp</p>
<pre><code class="language-cpp">#include &quot;fifo.hpp&quot;
#include &lt;cassert&gt;

int main()
{
	Stapel s = Init(20);

	for(int i = 0; i &lt; 20; ++i)
		Push(s, i);

	for(int i = 0; i &lt; 20; ++i)
		Pop(s);

	assert(IsEmpty(s));

	Dispose(s);

	return 0;
}
</code></pre>
<p>fifo_class.hpp</p>
<pre><code class="language-cpp">#ifndef FIFO_20051013_HPP
#define FIFO_20051013_HPP

#include &lt;cstddef&gt;

class Stack
{
public:
	Stack(size_t size);
	Stack(const Stack&amp; rhs);
	~Stack();

	void push(int value);
	int pop();

	bool isEmpty() { return !numElements_; }

	Stack&amp; operator= (const Stack&amp; rhs);

private:
	size_t size_, numElements_;
	int* pData_;
};

#endif
</code></pre>
<p>fifo_class.cpp</p>
<pre><code class="language-cpp">#include &quot;fifo_class.hpp&quot;

#include &lt;cstring&gt;
#include &lt;stdexcept&gt;
#include &lt;cassert&gt;

Stack::Stack(size_t size) :
size_(size),
numElements_(0),
pData_(new int[size_])
{
	assert(size_);
}

Stack::Stack(const Stack&amp; rhs) :
size_(rhs.size_),
numElements_(rhs.numElements_),
pData_(new int[size_])
{
	std::memcpy(pData_, rhs.pData_, numElements_ * 4);
}

Stack::~Stack()
{
	delete [] pData_;
}

void Stack::push(int value)
{
	// assert(numElements_ != size)
	if(numElements_ == size_)
		throw std::runtime_error(&quot;too many elements&quot;);

	pData_[numElements_++] = value;
}

int Stack::pop()
{
	//assert(numElements);
	if(!numElements_)
		throw std::runtime_error(&quot;no elements to pop&quot;);

	return pData_[--numElements_];
}

Stack&amp; Stack::operator= (const Stack&amp; rhs)
{
	size_ = rhs.size_;
	numElements_ = rhs.numElements_;

	int* tmp = new int[size_];
	std::memcpy(tmp, rhs.pData_, numElements_ * 4);

	delete [] pData_;
	pData_ = tmp;

	return *this;
}
</code></pre>
<p>fifo_class-main.cpp</p>
<pre><code class="language-cpp">#include &quot;fifo_class.hpp&quot;
#include &lt;exception&gt;
#include &lt;iostream&gt;

#include &lt;cstdlib&gt;
#include &lt;ctime&gt;

using namespace std;

int main()
{
  	Stack s(20);
	try
	{

		for(int i(0); i &lt; 20; ++i)
			s.push(i);

		assert(!s.isEmpty());

		for(int i(19); i &gt;= 0; --i)
		{
			int ret = s.pop();
			assert(ret == i);
		}
		assert(s.isEmpty());
	}
	catch(exception&amp; e)
	{
		cout &lt;&lt; e.what() &lt;&lt; endl;
		return 3;
	}
	catch(...)
	{
		cout &lt;&lt; &quot;uknown exception!&quot; &lt;&lt; endl;
		return 4;
	}

	try
	{
		s.pop();
	}
	catch(exception&amp; e)
	{
		cout &lt;&lt; e.what() &lt;&lt; endl;
		goto next; 
// usually goto is considered harmful, but i'm too lazy to think of another 
// solution, f.e. functions
	}
	catch(...)
	{
		cout &lt;&lt; &quot;uknown exception!&quot; &lt;&lt; endl;
		return 1;
	}

	cout &lt;&lt; &quot;no exception thrown.\n&quot;;
	return 2;

  next:

	srand(time(0));

	Stack s2(30);

	for(int i = 0; i &lt; 30; ++i)
		s2.push(rand());

	Stack t(s2), u(40);

	for(int i = 0; i &lt; 25; ++i)
		assert(t.pop() == s2.pop());

	t = u;

	return 0;
}
</code></pre>
<p>der vollständigkeit halber erwähne ich dann natürlich nocheinmal die wahrscheinlich beste lösung(ungetestet...):</p>
<pre><code class="language-cpp">#include &lt;stack&gt;
</code></pre>
<p>mfg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/891280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891280</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Thu, 13 Oct 2005 11:42:24 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Thu, 13 Oct 2005 11:43:27 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>ah, mißverständnis. ich hab dich gar nicht angeflamed. in dem posting von mir war null ironie. muß wohl in zukunft &lt;keine ironie&gt;-tags setzen, wenn ich mal applaudiere (was zugegebenermaßen zu selten ist). ich wünsche es echt, daß weniger offensichtliche freizeitpädagogik betrieben wird, sondern mehr geholfen. wer jemanden beeinflussen will, muß das eh unter der gürtelline tun, subversiv, schleichend, versteckt, nachhaltig und konsequent. das ist aber auch jedem antworter seine eigene entscheidung, wie weit er es treibt. ein paar leichte funktionen auslassen finde ich gut. oder tippfehler machen. nur ein &quot;denk selber nach!&quot; zu posten finde ich nicht gut. das ärgert den frager nur und bringt keinen<br />
weiter.</p>
</blockquote>
<p>Entschuldigung. Aber ich dieses &quot;gut so! fein so!&quot; hat mich echt gestört. und danach war ich leicht sauer und hab den rest nicht mehr so aufmerksam gelesen.</p>
<blockquote>
<p>supi. daß sie nur vorläufig gelöscht ist. das interpretiere ich so, daß du ne kopie auf platte hast. stell sie bitte wieder rein.</p>
</blockquote>
<p>Ist wieder da.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/891295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891295</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Thu, 13 Oct 2005 11:43:27 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Thu, 13 Oct 2005 11:52:28 GMT]]></title><description><![CDATA[<p>terraner schrieb:</p>
<blockquote>
<p>CS schrieb:</p>
<blockquote>
<p>Args, der Quellcode dort sieht ja grauenvoll aus. Bist du sicher, daß der (a) ohne Fehlermeldungen compiliert und (b) das richtige macht? *(c)*Und warum nutzt du, wenn du schon in C++ unterwegs bist, nicht das Klassenkonzept (Init wäre Konstruktor, die übrigen Funktionen Methoden von Stapel)?</p>
</blockquote>
<p>(a) Ja.</p>
</blockquote>
<p>Hm, der Original-Quelltext ist jetzt weg, aber dort war ich mir nicht so sicher.</p>
<blockquote>
<p>fifo.cpp</p>
<pre><code class="language-cpp">void Push(Stapel s, int x) // für &quot;x&quot; besser &quot;value&quot; oder soetwas nehmen
{
	// Abfrage, ob Stack voll ist, fehlt
	if(s-&gt;top == s-&gt;size)
	{
		delete [] s; // hm...
		// ich schmeiss lieber keine exceptions in c-code.
		// aber ich kann auch keine mit dem rückgabe-wert anzeigen...
		s-&gt;data[std::rand()] = 0;
	}

   s-&gt;data[s-&gt;top++] = x; // schön kompakt gelöst
   //s-&gt;data[top] = x;
   //top = (top+1)%ize;
}
</code></pre>
</blockquote>
<p>für die Überlauf-Abfrage gibt es doch bessere Lösungen als dem User den Stack zu zerklumpen (und im Extremfall auch Daten außerhalb des Stacks).</p>
<blockquote>
<pre><code class="language-cpp">void Dispose (Stapel s)
{
   delete [] s-&gt;data;
   //delete s; // warum den zeiger selbst deleten?
}
</code></pre>
</blockquote>
<p>Wer soll das denn sonst machen, wenn nicht ich?</p>
<blockquote>
<p>fifo_class.cpp</p>
<pre><code class="language-cpp">#include &quot;fifo_class.hpp&quot;

#include &lt;cstring&gt;
#include &lt;stdexcept&gt;
#include &lt;cassert&gt;

Stack::Stack(size_t size) :
size_(size),
numElements_(0),
pData_(new int[size_])
{
	assert(size_);
}
</code></pre>
</blockquote>
<p>Was der assert bringen soll, ist mir unklar.</p>
<blockquote>
<p>for(int i(0); i &lt; 20; ++i) s.push(i);</p>
</blockquote>
<p>Wer hat dir denn dir Schreibweise beigebracht?</p>
<blockquote>
<pre><code class="language-cpp">try
	{
		s.pop();
	}
	catch(exception&amp; e)
	{
		cout &lt;&lt; e.what() &lt;&lt; endl;
		goto next; 
// usually goto is considered harmful, but i'm too lazy to think of another 
// solution, f.e. functions
	}
	catch(...)
	{
		cout &lt;&lt; &quot;uknown exception!&quot; &lt;&lt; endl;
		return 1;
	}

	cout &lt;&lt; &quot;no exception thrown.\n&quot;;
	return 2;

  next:
</code></pre>
</blockquote>
<p>Also an der Stelle ist goto sinnlos - übersichtlicher wäre es, den &quot;return 2&quot; mit in den try-Block zu packen.</p>
<blockquote>
<p>der vollständigkeit halber erwähne ich dann natürlich nocheinmal die wahrscheinlich beste lösung(ungetestet...):</p>
<pre><code class="language-cpp">#include &lt;stack&gt;
</code></pre>
<p>mfg</p>
</blockquote>
<p>Allerdings mußt du bedenken, daß bei der Implementierung pop() keine Rückgabe liefert <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="😉"
    /> (und im Vorteil zu deinem Konstrukt spuckt std::stack&lt;&gt; auch keine Exceptions)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/891300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891300</guid><dc:creator><![CDATA[CS]]></dc:creator><pubDate>Thu, 13 Oct 2005 11:52:28 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Thu, 13 Oct 2005 12:10:17 GMT]]></title><description><![CDATA[<p>CS schrieb:</p>
<blockquote>
<p>für die Überlauf-Abfrage gibt es doch bessere Lösungen als dem User den Stack zu zerklumpen (und im Extremfall auch Daten außerhalb des Stacks).</p>
</blockquote>
<p>ja, aber exceptions wollte wie gesagt keine werfen, weil das alles sehr grundlegend aussah, aber fehlercodes konnte ich nicht zurückgeben. da wären dann imo nur fehlerfunktionen geblieben, die ich nicht schreiben wollte.</p>
<blockquote>
<p>Wer soll das denn sonst machen, wenn nicht ich?</p>
</blockquote>
<p>das verstehe ich nicht. der mit new allozierte speicher ist fregegeben und s ist nur eine kopie eines zeigers auf dem stack</p>
<blockquote>
<p>Was der assert bringen soll, ist mir unklar.</p>
</blockquote>
<p>der code funktioniert nicht mehr, wenn size_ = 0 sein kann. new alloziert dann zwar richtig, aber die push-methode würde z.b. versagen.</p>
<blockquote>
<p>Wer hat dir denn dir Schreibweise beigebracht?</p>
</blockquote>
<p>manchmal machen ich mir eben gerne klar, dass da ein konstruktor ist und keine zuweisung stattfindet.</p>
<blockquote>
<p>Also an der Stelle ist goto sinnlos - übersichtlicher wäre es, den &quot;return 2&quot; mit in den try-Block zu packen.</p>
</blockquote>
<p>an der stelle soll aber eine absichtlich ausgelöste exception gefangen werden. siehe zeile 42.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/891313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891313</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Thu, 13 Oct 2005 12:10:17 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Thu, 13 Oct 2005 12:47:05 GMT]]></title><description><![CDATA[<p>terraner schrieb:</p>
<blockquote>
<p>CS schrieb:</p>
<blockquote>
<p>für die Überlauf-Abfrage gibt es doch bessere Lösungen als dem User den Stack zu zerklumpen (und im Extremfall auch Daten außerhalb des Stacks).</p>
</blockquote>
<p>ja, aber exceptions wollte wie gesagt keine werfen, weil das alles sehr grundlegend aussah, aber fehlercodes konnte ich nicht zurückgeben. da wären dann imo nur fehlerfunktionen geblieben, die ich nicht schreiben wollte.</p>
</blockquote>
<p>Dann deklarierst du halt push() als int-Funktion und schon kannst du Fehlerwerte zurückgeben. Oder du rettest die Daten, indem du dynamisch den Speicher vergrößerst.</p>
<blockquote>
<blockquote>
<p>Wer soll das denn sonst machen, wenn nicht ich?</p>
</blockquote>
<p>das verstehe ich nicht. der mit new allozierte speicher ist fregegeben und s ist nur eine kopie eines zeigers auf dem stack</p>
</blockquote>
<p>Du hast s (irgendwann weiter vorne) mittels new angelegt - also bist du auch dafür verantwortlich, s wieder ordentlich zu deleten.</p>
<blockquote>
<blockquote>
<p>Was der assert bringen soll, ist mir unklar.</p>
</blockquote>
<p>der code funktioniert nicht mehr, wenn size_ = 0 sein kann. new alloziert dann zwar richtig, aber die push-methode würde z.b. versagen.</p>
</blockquote>
<p>*schaut sich den Befehl nochmal an* Aber dein Konstruktor kommt nur an dem assert vorbei, wenn size_=0 ist. Wenn schon, dann müsstest du dort ein &quot;assert(size_&gt;0);&quot; einsetzen.</p>
<blockquote>
<blockquote>
<p>Wer hat dir denn dir Schreibweise beigebracht?</p>
</blockquote>
<p>manchmal machen ich mir eben gerne klar, dass da ein konstruktor ist und keine zuweisung stattfindet.</p>
</blockquote>
<p>Na, wem's gefällt <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>
<blockquote>
<blockquote>
<p>Also an der Stelle ist goto sinnlos - übersichtlicher wäre es, den &quot;return 2&quot; mit in den try-Block zu packen.</p>
</blockquote>
<p>an der stelle soll aber eine absichtlich ausgelöste exception gefangen werden. siehe zeile 42.</p>
</blockquote>
<p>[/quote]<br />
Das geht imho eleganter mit:</p>
<pre><code class="language-cpp">try
{
    s.pop();
    cout &lt;&lt; &quot;No Exception&quot; &lt;&lt; endl;
    return 2;
}
catch(exception&amp; e)
{
    cout &lt;&lt; e.what() &lt;&lt; endl;
}
catch(...)
{
    cout &lt;&lt; &quot;uknown exception!&quot; &lt;&lt; endl;
    return 1;
}
// hier landest du automatisch nach der Exception-Behandlung
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/891337</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891337</guid><dc:creator><![CDATA[CS]]></dc:creator><pubDate>Thu, 13 Oct 2005 12:47:05 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Thu, 13 Oct 2005 15:50:35 GMT]]></title><description><![CDATA[<p>CS schrieb:</p>
<blockquote>
<p>Dann deklarierst du halt push() als int-Funktion und schon kannst du Fehlerwerte zurückgeben. Oder du rettest die Daten, indem du dynamisch den Speicher vergrößerst.</p>
</blockquote>
<p>ja, das hätte ich bewerkstelligen können. da es aber vom erdenker der funktionen nicht so vorgesehen war, habe ich es gelassen.</p>
<blockquote>
<p>Du hast s (irgendwann weiter vorne) mittels new angelegt - also bist du auch dafür verantwortlich, s wieder ordentlich zu deleten.</p>
</blockquote>
<p>nein, den speicher auf den s zeigt habe ich mit new angelegt. und der wird in der zeile über dem kommentar ja gelöscht. s selbst ist wie gesagt nur eine kopie eines zeigers auf dem stack</p>
<blockquote>
<p>*schaut sich den Befehl nochmal an* Aber dein Konstruktor kommt nur an dem assert vorbei, wenn size_=0 ist. Wenn schon, dann müsstest du dort ein &quot;assert(size_&gt;0);&quot; einsetzen.</p>
</blockquote>
<p>nein, es ist genau umgekehrt. werte != 0 werden nämlich als true ausgewertet.</p>
<blockquote>
<p>Das geht imho eleganter mit:<br />
...</p>
</blockquote>
<p>stimmt. da hätte man drauf kommen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/891513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891513</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Thu, 13 Oct 2005 15:50:35 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Fri, 14 Oct 2005 06:45:28 GMT]]></title><description><![CDATA[<p>s ist ein Zeiger auf einen Header-Bereich, dieser enthält einen Zeiger auf die Daten.<br />
Im &quot;Konstruktor&quot; Init legst du den Header und die Daten mittels new an:</p>
<pre><code class="language-cpp">Stapel Init(int size)
{
   Stapel s;
   s = new Header;           // Header angelegt
   s-&gt;data = new int[size];  // Daten angelegt
   s-&gt;size = size;
   s-&gt;top = 0;
   return s;
}
</code></pre>
<p>Im &quot;Destruktor&quot; Dispose erhälst du eine Kopie des von Init zurückgelieferten Zeigers und löschst den Datenblock - der Speicherplatz für den Header bleibt aber unberührt.</p>
<pre><code class="language-cpp">void Dispose (Stapel s)
{
   delete [] s-&gt;data;        // Daten gelöscht
   //delete s;               // das sollte den Header löschen
}
</code></pre>
<p>(delete löscht nicht den Zeiger selbst, sondern den Datenblock, auf den er zeigt)</p>
<p>PS: Ja, undefined behaviour ist was wunderbares <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="🙂"
    /> aber mit &quot;s-&gt;data[std::rand()] = 0;&quot; zerlegst du Bereiche des Nutzerprogramms, die höchstwahrscheinlich nichts mit dem verarbeiteten Stack zu tun haben - und das ohne den Nutzer darüber zu informieren. DAS ist wohl die denkbar schlechteste Methode, mit einer Fehleingabe umzugehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/891986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/891986</guid><dc:creator><![CDATA[CS]]></dc:creator><pubDate>Fri, 14 Oct 2005 06:45:28 GMT</pubDate></item><item><title><![CDATA[Reply to Anfängerproblem FIFO-Queue on Fri, 14 Oct 2005 13:41:30 GMT]]></title><description><![CDATA[<p>CS schrieb:</p>
<blockquote>
<pre><code class="language-cpp">{
   Stapel s;
   s = new Header;           // Header angelegt
   s-&gt;data = new int[size];  // Daten angelegt
   s-&gt;size = size;
   s-&gt;top = 0;
   return s;
}
</code></pre>
</blockquote>
<p>blödes typedef... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /><br />
aber du hast recht und jetzt wo du mir den code nochmal gezeigt hast, sehe ich es auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/892367</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/892367</guid><dc:creator><![CDATA[terraner]]></dc:creator><pubDate>Fri, 14 Oct 2005 13:41:30 GMT</pubDate></item></channel></rss>