<?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[Fehlerhafte Klasse]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich lerne zurzeit C++ und versuche Aufgaben zu lösen. Hier ist jedoch eine Aufgabe, die ich nicht verstehe. Könntet Ihr mir eventuell eine Tipps geben, wo der Fehler sein könnte? <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>Also es sind die Klassen sinuswerte.hpp, sinuswerte.cpp und die Datei main.cpp vorhanden, wobei bei der Klasse Sinuswerte ein Fehler existiert, der zu finden ist. Dieser Fehler soll gefunden und korrigiert werden.</p>
<p>Hier die Klassen bzw. Datei:</p>
<p>sinuswerte.hpp<br />
#ifndef SINUSWERTE_HPP<br />
#define SINUSWERTE_HPP</p>
<p>class Sinuswerte<br />
{<br />
private:<br />
int anzahl;<br />
double* werte;<br />
public:<br />
Sinuswerte(int anzahl);<br />
double sin(double x);<br />
};</p>
<p>#endif</p>
<p>sinuswerte.cpp<br />
#include &lt;iostream&gt;<br />
#include &lt;cstdlib&gt;<br />
#include &lt;cmath&gt;<br />
#include &quot;sinuswerte.hpp&quot;</p>
<p>Sinuswerte::Sinuswerte(int anzahl)<br />
: anzahl(anzahl)<br />
{<br />
werte = new (std::nothrow) double[anzahl];<br />
if (!werte) {<br />
std::cout &lt;&lt; &quot;Zu wenig Speicher verfuegbar.&quot; &lt;&lt; std::endl;<br />
std::exit(1);<br />
}</p>
<p>for (int i = 0; i &lt; anzahl; ++i) {<br />
werte[i] = std::sin(i*2*M_PI/anzahl);<br />
}<br />
}</p>
<p>double Sinuswerte::sin(double x)<br />
{<br />
int i = (int)(x*anzahl/2/M_PI) % anzahl;<br />
if (i &lt; 0) i += anzahl;<br />
return werte[i];<br />
}</p>
<p>main.cpp<br />
#include &lt;iostream&gt;<br />
#include &quot;sinuswerte.hpp&quot;</p>
<p>int main()<br />
{<br />
for (int i = 0; i &lt; 100000000; ++i) {<br />
Sinuswerte* sinuswerte = new Sinuswerte(100);<br />
sinuswerte􀀀&gt;sin(0.3456);<br />
delete sinuswerte;<br />
}<br />
}</p>
<p>Ich wäre dankbar für jeden Tipp. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>MfG und Danke im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/329783/fehlerhafte-klasse</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Jul 2026 00:06:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/329783.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Dec 2014 00:31:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 00:31:11 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich lerne zurzeit C++ und versuche Aufgaben zu lösen. Hier ist jedoch eine Aufgabe, die ich nicht verstehe. Könntet Ihr mir eventuell eine Tipps geben, wo der Fehler sein könnte? <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>Also es sind die Klassen sinuswerte.hpp, sinuswerte.cpp und die Datei main.cpp vorhanden, wobei bei der Klasse Sinuswerte ein Fehler existiert, der zu finden ist. Dieser Fehler soll gefunden und korrigiert werden.</p>
<p>Hier die Klassen bzw. Datei:</p>
<p>sinuswerte.hpp<br />
#ifndef SINUSWERTE_HPP<br />
#define SINUSWERTE_HPP</p>
<p>class Sinuswerte<br />
{<br />
private:<br />
int anzahl;<br />
double* werte;<br />
public:<br />
Sinuswerte(int anzahl);<br />
double sin(double x);<br />
};</p>
<p>#endif</p>
<p>sinuswerte.cpp<br />
#include &lt;iostream&gt;<br />
#include &lt;cstdlib&gt;<br />
#include &lt;cmath&gt;<br />
#include &quot;sinuswerte.hpp&quot;</p>
<p>Sinuswerte::Sinuswerte(int anzahl)<br />
: anzahl(anzahl)<br />
{<br />
werte = new (std::nothrow) double[anzahl];<br />
if (!werte) {<br />
std::cout &lt;&lt; &quot;Zu wenig Speicher verfuegbar.&quot; &lt;&lt; std::endl;<br />
std::exit(1);<br />
}</p>
<p>for (int i = 0; i &lt; anzahl; ++i) {<br />
werte[i] = std::sin(i*2*M_PI/anzahl);<br />
}<br />
}</p>
<p>double Sinuswerte::sin(double x)<br />
{<br />
int i = (int)(x*anzahl/2/M_PI) % anzahl;<br />
if (i &lt; 0) i += anzahl;<br />
return werte[i];<br />
}</p>
<p>main.cpp<br />
#include &lt;iostream&gt;<br />
#include &quot;sinuswerte.hpp&quot;</p>
<p>int main()<br />
{<br />
for (int i = 0; i &lt; 100000000; ++i) {<br />
Sinuswerte* sinuswerte = new Sinuswerte(100);<br />
sinuswerte􀀀&gt;sin(0.3456);<br />
delete sinuswerte;<br />
}<br />
}</p>
<p>Ich wäre dankbar für jeden Tipp. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<p>MfG und Danke im Voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431711</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431711</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Mon, 08 Dec 2014 00:31:11 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 00:38:20 GMT]]></title><description><![CDATA[<p>In Anbetracht der Tatsache, dass in der main ein paar Millionen Instanzen davon erzeugt werden wird wohl gemeint sein, dass sie keinen Destruktor hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431712</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 08 Dec 2014 00:38:20 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 10:16:14 GMT]]></title><description><![CDATA[<p>Genau das ist das zu lösende Problem. Ich soll ohne eine Änderung der main-Funktion und des Konstruktors diesen Fehler beheben.</p>
<p>Ich verstehe im Allgemeinen jedoch nicht, was in der main-funktion bezweckt ist.<br />
Nach meinen Verständnis erfolgt folgendes:</p>
<p>1. Es werden 100000000 mal ein Array von Sinuswerten der Länge 100 deklariert.<br />
2. Dann wird die Funktion sin(0.3456) aufgerufen, der im Grunde immer ein bestimmtes Element des Arrays zurückgibt, ohne diese zu ändern.<br />
3. Anschließend wird das erzeugte Array sinuswerte einfach gelöscht.</p>
<p>Verstehe ich das Programm falsch? Wenn das Array mithilfe des Befehls delete bei jedem Scleifendurchlauf gelöscht wird, entsteht doch kein Memory-Leak oder?</p>
<p>LG<br />
Markus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431737</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431737</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Mon, 08 Dec 2014 10:16:14 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 10:37:51 GMT]]></title><description><![CDATA[<p>Markus97 schrieb:</p>
<blockquote>
<p>Genau das ist das zu lösende Problem. Ich soll ohne eine Änderung der main-Funktion und des Konstruktors diesen Fehler beheben.</p>
</blockquote>
<p>und das tust du, indem du einen Destruktor hinzufügst und darin den angeforderten Speicher wieder freigibst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431741</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Mon, 08 Dec 2014 10:37:51 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 10:39:06 GMT]]></title><description><![CDATA[<p>Markus97 schrieb:</p>
<blockquote>
<p>Verstehe ich das Programm falsch? Wenn das Array mithilfe des Befehls delete bei jedem Scleifendurchlauf gelöscht wird, entsteht doch kein Memory-Leak oder?</p>
</blockquote>
<p>Das Array wird aber nicht gelöscht. Bei jedem Schleifendurchlauf in der main wird die Klasse und im Konstruktor ein array mit new erstellt, welches aber nie wieder gelöscht wird aufgrund des fehlenden Destruktors.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431742</guid><dc:creator><![CDATA[tkausl]]></dc:creator><pubDate>Mon, 08 Dec 2014 10:39:06 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 11:11:16 GMT]]></title><description><![CDATA[<p>Ich hatte folgenden Destruktor definiert:</p>
<pre><code>Sinuswerte::~Sinuswerte(){
	delete[] werte;
}
</code></pre>
<p>Jedoch bestand das Problem weiterhin. Grund dafür ist glaube ich, dass man zuerst die individuellen Objekte freigeben muss, bevor das Array gelöscht wird.</p>
<pre><code>Sinuswerte::~Sinuswerte(){

	 for (int i = 0; i &lt; anzahl; ++i){
		delete werte[i];
	 }
	delete[] werte;
}
</code></pre>
<p>Doch auf diese Weise erhalte ich ein Problem:<br />
error: invalid type argument of unary '*' (have 'double'), expected pointer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431747</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Mon, 08 Dec 2014 11:11:16 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 11:10:07 GMT]]></title><description><![CDATA[<p>Markus97 schrieb:</p>
<blockquote>
<p>Ich hatte folgenden Konstruktor definiert:</p>
<pre><code>Sinuswerte::~Sinuswerte(){
	delete[] werte;
}
</code></pre>
</blockquote>
<p>Das ist auch ganz richtig so.</p>
<p>Markus97 schrieb:</p>
<blockquote>
<p>Jedoch bestand das Problem weiterhin.</p>
</blockquote>
<p>Welches Problem? Hier war bis jetzt immer nur die Rede von &quot;einem Fehler&quot;. Bekommst du eine Fehlermeldung vom Compiler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431753</guid><dc:creator><![CDATA[daddy_felix]]></dc:creator><pubDate>Mon, 08 Dec 2014 11:10:07 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 11:13:06 GMT]]></title><description><![CDATA[<p>Zu jedem new gehört ein delete, deshalb ist der erste Destruktor richtig (du hast ja nirgens sowas wie 'werte[123] = new irgendwas'.</p>
<p>Du hast geschrieben</p>
<p>Markus97 schrieb:</p>
<blockquote>
<p>1. Es werden 100000000 mal ein Array von Sinuswerten der Länge 100 deklariert.<br />
2. Dann wird die Funktion sin(0.3456) aufgerufen</p>
</blockquote>
<p>In dem Code den du zeigst, passiert da nacheinander. Ist der Code hier anders, als der, mit dem du arbeitest?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431754</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 08 Dec 2014 11:13:06 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 11:13:30 GMT]]></title><description><![CDATA[<p>Ich erhalte keinen Compiler-Fehler. Jedoch läuft das Programm leider bei der Ausführung ohne ein Ende zu nehmen, was ich verhindern möchte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431755</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Mon, 08 Dec 2014 11:13:30 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 11:16:05 GMT]]></title><description><![CDATA[<p>Markus97 schrieb:</p>
<blockquote>
<p>Ich erhalte keinen Compiler-Fehler. Jedoch läuft das Programm leider bei der Ausführung ohne ein Ende zu nehmen, was ich verhindern möchte.</p>
</blockquote>
<p>Ohne ein Ende ist mit diesem Code (anzahl der durchläufe, berechnungen, ...) in ordnung (es wird Enden, irgendwann...)<br />
Was du verhindern solltest ist dieser</p>
<pre><code>std::cout &lt;&lt; &quot;Zu wenig Speicher verfuegbar.&quot; &lt;&lt; std::endl;
</code></pre>
<p>fehler, und das hast du mit dem Destruktor erledigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431757</guid><dc:creator><![CDATA[tkausl]]></dc:creator><pubDate>Mon, 08 Dec 2014 11:16:05 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 11:19:31 GMT]]></title><description><![CDATA[<p>hi lerne auch grad privat c++ und wollte mal fragen ob du auch privat lernst, oder wegen ausbildung/studium. und wenn ausbildung/studium, in welchem jahr du bist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431758</guid><dc:creator><![CDATA[karotte.]]></dc:creator><pubDate>Mon, 08 Dec 2014 11:19:31 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 17:10:59 GMT]]></title><description><![CDATA[<p>Markus97 schrieb:</p>
<blockquote>
<p>Ich erhalte keinen Compiler-Fehler. Jedoch läuft das Programm leider bei der Ausführung ohne ein Ende zu nehmen</p>
</blockquote>
<p>Vielleicht dauert es einfach eine Weile? Verkleiner doch mal die Zahl der Schleifendurchläufe auf was handlicheres.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2431830</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431830</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Mon, 08 Dec 2014 17:10:59 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlerhafte Klasse on Mon, 08 Dec 2014 19:25:51 GMT]]></title><description><![CDATA[<p>Danke sehr, hat geklappt. Nun kann ich das nächste Thema in C++ beginnen. <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/2431861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2431861</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Mon, 08 Dec 2014 19:25:51 GMT</pubDate></item></channel></rss>