<?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[speicherallokierung und -freigabe...]]></title><description><![CDATA[<p>ich habe ein problem mit der speicherallokierung! in meinem konstruktor stelle ich den speicher bereit und im destruktor gebe ich ihn wieder frei. aber dann habe ich noch eine funktion die auch wieder speicher allokiert, wie gebe ich diesen wieder frei?</p>
<pre><code class="language-cpp">template &lt;class T&gt;
inline array&lt;T&gt;::array(unsigned int zeilen) 
: index_z(0), zeilen_array(zeilen)
{
	array_eindim = new T[zeilen];
}

template &lt;class T&gt;
array&lt;T&gt;::~array()
{
	delete [] array_eindim;
}

template &lt;class T&gt;
void array&lt;T&gt;::set_dim(unsigned int zeilen)
{
	array_eindim = new T[zeilen];
	zeilen_array = zeilen;
	index_z = 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/118832/speicherallokierung-und-freigabe</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 19:17:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/118832.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 24 Aug 2005 19:37:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Wed, 24 Aug 2005 19:37:28 GMT]]></title><description><![CDATA[<p>ich habe ein problem mit der speicherallokierung! in meinem konstruktor stelle ich den speicher bereit und im destruktor gebe ich ihn wieder frei. aber dann habe ich noch eine funktion die auch wieder speicher allokiert, wie gebe ich diesen wieder frei?</p>
<pre><code class="language-cpp">template &lt;class T&gt;
inline array&lt;T&gt;::array(unsigned int zeilen) 
: index_z(0), zeilen_array(zeilen)
{
	array_eindim = new T[zeilen];
}

template &lt;class T&gt;
array&lt;T&gt;::~array()
{
	delete [] array_eindim;
}

template &lt;class T&gt;
void array&lt;T&gt;::set_dim(unsigned int zeilen)
{
	array_eindim = new T[zeilen];
	zeilen_array = zeilen;
	index_z = 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/857820</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/857820</guid><dc:creator><![CDATA[exigoner]]></dc:creator><pubDate>Wed, 24 Aug 2005 19:37:28 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Wed, 24 Aug 2005 19:41:34 GMT]]></title><description><![CDATA[<p>Wenn Du einmal allocierten Speicher wieder allocieren willst, musst Du ihn vorher freigeben. Ansonsten hast Du die schoensten Memory-Leaks.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/857824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/857824</guid><dc:creator><![CDATA[MBCS-CITP]]></dc:creator><pubDate>Wed, 24 Aug 2005 19:41:34 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Wed, 24 Aug 2005 19:42:40 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>es müßte ja das reichen</p>
<pre><code class="language-cpp">template &lt;class T&gt;
void array&lt;T&gt;::set_dim(unsigned int zeilen)
{
    delete [] array_eindim; // Alles was vorher war löschen
    array_eindim = new T[zeilen];
    zeilen_array = zeilen;
    index_z = 0;
}
</code></pre>
<p>Der Destruktor kümmert sich um das was übrigbleibt.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/857826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/857826</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 24 Aug 2005 19:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Wed, 24 Aug 2005 20:03:48 GMT]]></title><description><![CDATA[<p>Besser zuerst neu allokieren und dann alten Speicher freigeben, ansonsten riskierst du, dass deine Instanz uU in einem undefinierten Zustand zurückbleibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/857847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/857847</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Wed, 24 Aug 2005 20:03:48 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 08:16:06 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt;class T&gt;
void array&lt;T&gt;::set_dim(unsigned int zeilen)
{
    delete [] array_eindim; // Alles was vorher war löschen
    array_eindim = new T[zeilen];
    zeilen_array = zeilen;
    index_z = 0;
}
</code></pre>
<p>das habe ich mal probiert, und ich bekomme folgendes wenn ich mein programm starte:</p>
<pre><code>/bin/sh: line 1: 13181 Speicherzugriffsfehler  ./perzeptron
Betätigen Sie die Eingabetaste, um fortzufahren!
</code></pre>
<p>wenn ich</p>
<pre><code class="language-cpp">delete [] array_eindim;
</code></pre>
<p>weglasse, funktioniert es aber wieder:</p>
<pre><code>Position 0: 0.1
ist 0
Betätigen Sie die Eingabetaste, um fortzufahren!
</code></pre>
<p>allerdings habe ich wahrscheinlich durch diesen memory leak einen fehler wenn ich best. funktionen die set_dim() aufrufen mehrmals benutze...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/858038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858038</guid><dc:creator><![CDATA[exigoner]]></dc:creator><pubDate>Thu, 25 Aug 2005 08:16:06 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 08:22:29 GMT]]></title><description><![CDATA[<p>Poste doch mal deine Header-Datei mit der Klassendefinition</p>
]]></description><link>https://www.c-plusplus.net/forum/post/858042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858042</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Thu, 25 Aug 2005 08:22:29 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 09:07:19 GMT]]></title><description><![CDATA[<p>diese basisklasse verwende ich! soll ein &quot;etwas&quot; dynamisches array-handling ermöglichen...</p>
<pre><code class="language-cpp">#ifndef ARRAY_KLASSE
#define ARRAY_KLASSE

#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

template &lt;class T&gt;
class array
{
    private:
	T *array_eindim;

	unsigned int zeilen_array;
	unsigned int index_z;

    public:
	array();
	array(unsigned int z);
	array(array&lt;T&gt; const&amp; ref);
	~array();

	T *get_array();
	T get_element(unsigned int zeile);
	//unsigned int get_zeilen(); //sinnlos

	void ausgabe_array();
	void set_dim(unsigned int z);

	void push_back(T data);//zu machen
	void push_back(T *feld, unsigned int zeilen_feld);
	void push_pos(T *feld, unsigned int zeilen_feld, int pos_z);

	T mult(T *feld, unsigned int zeilen_feld);

	void clear_all();
};

//##############################################################################

template &lt;class T&gt;
inline array&lt;T&gt;::array() 
: index_z(0), zeilen_array(0) {}

template &lt;class T&gt;
inline array&lt;T&gt;::array(unsigned int zeilen) 
: index_z(0), zeilen_array(zeilen)
{
	array_eindim = new T[zeilen];
}

template &lt;class T&gt; 
inline array&lt;T&gt;::array(array&lt;T&gt; const&amp; ref) 
: index_z(ref.index_z), zeilen_array(ref.zeilen_array)
{
	array_eindim = new T[zeilen_array];
	for(int i = 0; i &lt; zeilen_array; ++i)
		array_eindim[i] = ref.array_eindim[i];
}

template &lt;class T&gt;
array&lt;T&gt;::~array()
{
	delete [] array_eindim;
}

template &lt;class T&gt;
T *array&lt;T&gt;::get_array()
{
	return array_eindim;
}

template &lt;class T&gt;
T array&lt;T&gt;::get_element(unsigned int z)
{
	if(z &lt; zeilen_array)
		return array_eindim[z];
}
/*
template &lt;class T&gt;
unsigned int array&lt;T&gt;::get_zeilen()
{
	return zeilen_array;
}
*/
template &lt;class T&gt;
void array&lt;T&gt;::set_dim(unsigned int zeilen)
{
	//delete [] array_eindim;
	array_eindim = new T[zeilen];
	zeilen_array = zeilen;
	index_z = 0;
}

template &lt;class T&gt;
void array&lt;T&gt;::ausgabe_array()
{
	for(unsigned int i = 0; i &lt; zeilen_array; i++)
		std::cout &lt;&lt; &quot;Position &quot; &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; array_eindim[i] &lt;&lt; std::endl;
    if(zeilen_array == 0)
        std::cout &lt;&lt; &quot;Array leer!&quot; &lt;&lt; std::endl;
}

template &lt;class T&gt;
void array&lt;T&gt;::push_back(T data)
{
	array_eindim[index_z] = data;
	index_z++;
}

template &lt;class T&gt;
void array&lt;T&gt;::push_back(T *feld, unsigned int feld_zeilen)
{
	for(unsigned int i = 0; i &lt; feld_zeilen; ++i &amp;&amp; ++index_z)
		array_eindim[index_z] = feld[i];
}

template &lt;class T&gt;
void array&lt;T&gt;::push_pos(T *feld, unsigned int feld_zeilen, int position_zeile)
{
	for(unsigned int i = position_zeile, j = 0; i &lt; (feld_zeilen + position_zeile); i++, j++)
		array_eindim[i] = feld[j];

	if( (feld_zeilen + position_zeile) &gt; index_z)
		index_z = (feld_zeilen + position_zeile);
}

template &lt;class T&gt;
T array&lt;T&gt;::mult(T *feld, unsigned int zeilen_feld)
{
	T temp;
	for(unsigned int i = 0; i &lt; zeilen_array &amp;&amp; i &lt; zeilen_feld; i++)
		temp = array_eindim[i] * feld[i];
	return temp;
}

template &lt;class T&gt;
void array&lt;T&gt;::clear_all()
{
	for(unsigned int i = zeilen_array; i &lt; zeilen_array; i++)
		array_eindim[i] = 0;

	index_z = 0;
}
#endif
</code></pre>
<p>anwenden tue ich dass im moment hier:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

#include &quot;array.hpp&quot;
#include &quot;matrix.hpp&quot;

class perzeptron
{
	private:
		array&lt;float&gt; eschicht;
		array&lt;float&gt; aschicht;
		array&lt;float&gt; ea_schicht;
		float schwelle;

	public:
		perzeptron(int eing, int ausg);

		array&lt;float&gt; durchlauf(float *data);
		void training();
		void set_zurueck();
};

void fill_array(array&lt;float&gt; &amp;array, int grenze)
{
/*
	for(int i = 0; i &lt; grenze; i++)
		array.push_back(1);
*/
	array.push_back(0.1);
	array.push_back(0.3);
}

perzeptron::perzeptron(int eing, int ausg)
{
	schwelle = 0.5;

	eschicht.set_dim(eing);  //hier 2
	aschicht.set_dim(ausg);  //hier 1

	ea_schicht.set_dim(eing);
	fill_array(ea_schicht, 2); //mit '1' gefüllt
}

array&lt;float&gt; perzeptron::durchlauf(float daten[2])
{
	eschicht.push_back(daten, 2);
	aschicht.push_back( ea_schicht.get_element(0)*eschicht.get_element(0) + ea_schicht.get_element(1)*eschicht.get_element(1) );

	aschicht.ausgabe_array();
	if(aschicht.get_element(0) &gt; schwelle)
		std::cout&lt;&lt;&quot;ist 1&quot;&lt;&lt;std::endl;
	else std::cout&lt;&lt;&quot;ist 0&quot;&lt;&lt;std::endl;

	return aschicht;
}
</code></pre>
<p>wenn ich in der main dass mache kriege ich speiicherzugriffsfehler</p>
<pre><code class="language-cpp">float data1[2] = {0,0};
	float data2[2] = {0,1};
	float data3[2] = {1,0};
	float data4[2] = {1,1};

	perzeptron perz(2, 1);
	perz.durchlauf(data1);
	perz.durchlauf(data2);
	perz.durchlauf(data3);
	perz.durchlauf(data4);
</code></pre>
<p>wenn ich aber nur</p>
<pre><code class="language-cpp">perz.durchlauf(data1);
</code></pre>
<p>das mache hab ich noch keinen fehler, ich glaub das liegt an der set_dim()-fkt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/858069</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858069</guid><dc:creator><![CDATA[exigoner]]></dc:creator><pubDate>Thu, 25 Aug 2005 09:07:19 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 09:25:50 GMT]]></title><description><![CDATA[<p>setz &quot;array_eindim&quot; in dem Konstruktor, wo du nichts machst mal auf NULL und überprüfe vor jedem delete, ob überhaupt ein Array angelegt wurde!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/858082</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858082</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Thu, 25 Aug 2005 09:25:50 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 09:29:58 GMT]]></title><description><![CDATA[<p>Ich würde mir auch push_back nochmal genauer ansehen. Du testst da nicht auf Überlauf (index_z &gt; zeilen_array).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/858083</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858083</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 25 Aug 2005 09:29:58 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 10:32:47 GMT]]></title><description><![CDATA[<p>mir fehlt programmierübung, ich mach sowas eigentlich nur wenn ich lust habe, im moment müssten alle fehler behoben sein! noch irgendwelche ratschläge, fehler, verbesserungen, etc. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<pre><code class="language-cpp">#ifndef ARRAY_KLASSE
#define ARRAY_KLASSE

#include &lt;iostream&gt;
#include &lt;cstdlib&gt;

template &lt;class T&gt;
class array
{
    private:
	T *array_eindim;

	unsigned int zeilen_array;
	unsigned int index_z;

    public:
	array();
	array(unsigned int z);
	array(array&lt;T&gt; const&amp; ref);
	~array();

	T *get_array();
	T get_element(unsigned int zeile);
	//unsigned int get_zeilen(); //sinnlos

	void ausgabe_array();
	void set_dim(unsigned int z);

	void push_back(T data);//zu machen
	void push_back(T *feld, unsigned int zeilen_feld);
	void push_pos(T *feld, unsigned int zeilen_feld, int pos_z);

	T mult(T *feld, unsigned int zeilen_feld);

	void clear_all();
};

//##############################################################################

template &lt;class T&gt;
inline array&lt;T&gt;::array() 
: index_z(0), zeilen_array(0) 
{
	array_eindim = NULL;
}

template &lt;class T&gt;
inline array&lt;T&gt;::array(unsigned int zeilen) 
: index_z(0), zeilen_array(zeilen)
{
	array_eindim = new T[zeilen];
}

template &lt;class T&gt; 
inline array&lt;T&gt;::array(array&lt;T&gt; const&amp; ref) 
: index_z(ref.index_z), zeilen_array(ref.zeilen_array)
{
	array_eindim = new T[zeilen_array];
	for(int i = 0; i &lt; zeilen_array; ++i)
		array_eindim[i] = ref.array_eindim[i];
}

template &lt;class T&gt;
array&lt;T&gt;::~array()
{
	if(array_eindim != NULL)
		delete [] array_eindim;
}

template &lt;class T&gt;
T *array&lt;T&gt;::get_array()
{
	return array_eindim;
}

template &lt;class T&gt;
T array&lt;T&gt;::get_element(unsigned int z)
{
	if(z &lt; zeilen_array)
		return array_eindim[z];
}
/*
template &lt;class T&gt;
unsigned int array&lt;T&gt;::get_zeilen()
{
	return zeilen_array;
}
*/
template &lt;class T&gt;
void array&lt;T&gt;::set_dim(unsigned int zeilen)
{
	if(array_eindim != NULL)
		delete [] array_eindim;

	array_eindim = new T[zeilen];
	zeilen_array = zeilen;
	index_z = 0;
}

template &lt;class T&gt;
void array&lt;T&gt;::ausgabe_array()
{
	for(unsigned int i = 0; i &lt; zeilen_array; i++)
		std::cout &lt;&lt; &quot;Position &quot; &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; array_eindim[i] &lt;&lt; std::endl;
    if(zeilen_array == 0)
        std::cout &lt;&lt; &quot;Array leer!&quot; &lt;&lt; std::endl;
}

template &lt;class T&gt;
void array&lt;T&gt;::push_back(T data)
{
	array_eindim[index_z] = data;
	if(index_z &lt;= zeilen_array)
		index_z++;
}

template &lt;class T&gt;
void array&lt;T&gt;::push_back(T *feld, unsigned int feld_zeilen)
{
	for(unsigned int i = 0; i &lt; feld_zeilen &amp;&amp; index_z &lt;= zeilen_array; ++i &amp;&amp; ++index_z)
		array_eindim[index_z] = feld[i];
}

template &lt;class T&gt;
void array&lt;T&gt;::push_pos(T *feld, unsigned int feld_zeilen, int position_zeile)
{
	for(unsigned int i = position_zeile, j = 0; i &lt; (feld_zeilen + position_zeile); i++, j++)
		array_eindim[i] = feld[j];

	if( (feld_zeilen + position_zeile) &gt; index_z)
		index_z = (feld_zeilen + position_zeile);
}

template &lt;class T&gt;
T array&lt;T&gt;::mult(T *feld, unsigned int zeilen_feld)
{
	T temp;
	for(unsigned int i = 0; i &lt; zeilen_array &amp;&amp; i &lt; zeilen_feld; i++)
		temp = array_eindim[i] * feld[i];
	return temp;
}

template &lt;class T&gt;
void array&lt;T&gt;::clear_all()
{
	for(unsigned int i = zeilen_array; i &lt; zeilen_array; i++)
		array_eindim[i] = 0;

	index_z = 0;
}
#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/858118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858118</guid><dc:creator><![CDATA[exigoner]]></dc:creator><pubDate>Thu, 25 Aug 2005 10:32:47 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 11:03:15 GMT]]></title><description><![CDATA[<p>Ich würde in deinem Fall auf das push_back lieber ganz verzichten, da es unter Umständen nicht das macht was man von ihm erwartet (übrigens dort &lt; (zeilen_array-1)und nicht &lt;=).<br />
Überlade lieber operator[] oder erzeugen eine Memberfunktion wie at(). Da kann man auch eine Indexüberprüfung machen.<br />
Statt push_back mit T* könnte man einen spezialisierten Konstruktor verwenden.<br />
oder verwende gleich vector oder boost::array.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/858144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858144</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 25 Aug 2005 11:03:15 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 11:06:11 GMT]]></title><description><![CDATA[<p>was meinst du mit &quot;nicht das machen, was man erwartet&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/858150</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858150</guid><dc:creator><![CDATA[exigoner]]></dc:creator><pubDate>Thu, 25 Aug 2005 11:06:11 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 11:09:26 GMT]]></title><description><![CDATA[<p>Ein push_back, z.Bsp. eines vector, hängt Elemente an das Ende deines Vectors an und allokiert bei Bedarf auch neuen Speicher (und kopiert dann). Wenn bei dir das Ende deines Arrays erreicht ist würde das letzte Element überschrieben.<br />
Das meine ich damit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/858156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858156</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 25 Aug 2005 11:09:26 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 12:04:28 GMT]]></title><description><![CDATA[<p>achso, das wird bald weggecodet <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="🙂"
    /> , ich überleg nur wie man das ohne umkopieren machen kann!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/858224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858224</guid><dc:creator><![CDATA[exigoner]]></dc:creator><pubDate>Thu, 25 Aug 2005 12:04:28 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 15:41:36 GMT]]></title><description><![CDATA[<p>exigoner schrieb:</p>
<blockquote>
<p>noch irgendwelche ratschläge, fehler, verbesserungen, etc. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Lass die Überprüfung auf NULL vor delete weg, das ist Unsinn. Und lies dir meinen ersten Beitrag noch mal durch. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/858479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858479</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Thu, 25 Aug 2005 15:41:36 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Thu, 25 Aug 2005 17:32:28 GMT]]></title><description><![CDATA[<blockquote>
<p>exigoner schrieb:<br />
noch irgendwelche ratschläge, fehler, verbesserungen, etc. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Lass die Überprüfung auf NULL vor delete weg, das ist Unsinn. Und lies dir meinen ersten Beitrag noch mal durch. <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>Was soll der erste Tip bringen?</p>
<p>In seiner Klasse gibt es doch nun beide Möglichkeiten, dass das Feld erstellt wurde oder halt nicht. Warum soll er da einfach die Überprüfung weglassen? Würde im letzter Fall ja die schon erwähnte Fehlermeldung bringen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/858543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858543</guid><dc:creator><![CDATA[cppLer]]></dc:creator><pubDate>Thu, 25 Aug 2005 17:32:28 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Fri, 26 Aug 2005 08:07:14 GMT]]></title><description><![CDATA[<p>Würde es nicht.<br />
Ein delete auf einen Nullpointer gibt keine Exception.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/858793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/858793</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 26 Aug 2005 08:07:14 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Fri, 26 Aug 2005 14:35:35 GMT]]></title><description><![CDATA[<p>gut ok, aber hier is ein delete auf ein Feld, also []delete, und da bringt er zumindest bei mir auch bei nem NULL-Pointer ne Exception</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859086</guid><dc:creator><![CDATA[cppLer]]></dc:creator><pubDate>Fri, 26 Aug 2005 14:35:35 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Fri, 26 Aug 2005 14:52:25 GMT]]></title><description><![CDATA[<p>cppLer schrieb:</p>
<blockquote>
<p>gut ok, aber hier is ein delete auf ein Feld, also []delete, und da bringt er zumindest bei mir auch bei nem NULL-Pointer ne Exception</p>
</blockquote>
<p>Blöd wenn sich was nicht an den Standard hält oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859098</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859098</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Fri, 26 Aug 2005 14:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Fri, 26 Aug 2005 15:22:27 GMT]]></title><description><![CDATA[<p>cppLer schrieb:</p>
<blockquote>
<p>gut ok, aber hier is ein delete auf ein Feld, also []delete, und da bringt er zumindest bei mir auch bei nem NULL-Pointer ne Exception</p>
</blockquote>
<p>Kann ich mit dem gcc 3.4 nicht bestaetigen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859126</guid><dc:creator><![CDATA[MBCS-CITP]]></dc:creator><pubDate>Fri, 26 Aug 2005 15:22:27 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Fri, 26 Aug 2005 16:42:56 GMT]]></title><description><![CDATA[<p>cppLer schrieb:</p>
<blockquote>
<p>Was soll der erste Tip bringen?</p>
</blockquote>
<p>delete kann nicht fehlschlagen, new aber schon. Und wenn geanu dieser Fall in set_dim eintritt, ist sein Objekt &quot;kaputt&quot;.</p>
<p>cppLer schrieb:</p>
<blockquote>
<p>In seiner Klasse gibt es doch nun beide Möglichkeiten, dass das Feld erstellt wurde oder halt nicht. Warum soll er da einfach die Überprüfung weglassen? Würde im letzter Fall ja die schon erwähnte Fehlermeldung bringen.</p>
</blockquote>
<p>Ich darf für dich mal den Standard zitieren</p>
<p>ISO/IEC 14882:2003(E) schrieb:</p>
<blockquote>
<p>if the value of the operand of delete is the null pointer the operation has no effect</p>
</blockquote>
<p>(5.3.5-2)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859169</guid><dc:creator><![CDATA[groovemaster]]></dc:creator><pubDate>Fri, 26 Aug 2005 16:42:56 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Fri, 26 Aug 2005 19:25:53 GMT]]></title><description><![CDATA[<p>mmh, also lass ich die überprüfung weg, früher kam, da immer ne komische fehlermeldung...<br />
jetz aber nicht mehr! trotzdem ist die überprüfung best. performance-verbessernd, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859317</guid><dc:creator><![CDATA[exigoner]]></dc:creator><pubDate>Fri, 26 Aug 2005 19:25:53 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Fri, 26 Aug 2005 19:30:59 GMT]]></title><description><![CDATA[<p>exigoner schrieb:</p>
<blockquote>
<p>mmh, also lass ich die überprüfung weg, früher kam, da immer ne komische fehlermeldung...<br />
jetz aber nicht mehr! trotzdem ist die überprüfung best. performance-verbessernd, oder?</p>
</blockquote>
<p>Ich vermute, dass der delete-Operator eine solche Ueberpruefung einfach selber macht. Schliesslich hat er bei einem NULL-Pointer nichts zu tun. Wenn man diese nochmal darum setzt, wird der Compiler - mit etwas Glueck - diese Abfrage weg-optimieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/859323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/859323</guid><dc:creator><![CDATA[MBCS-CITP]]></dc:creator><pubDate>Fri, 26 Aug 2005 19:30:59 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Sun, 28 Aug 2005 12:36:39 GMT]]></title><description><![CDATA[<blockquote>
<p>if the value of the operand of <strong>delete</strong> is the null pointer the operation has no effect</p>
</blockquote>
<p>bezieht sich das auch wirklich auf <strong>[]delete</strong> ???<br />
steht ja nur ohne Klammern da ... .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/860043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860043</guid><dc:creator><![CDATA[cppLer]]></dc:creator><pubDate>Sun, 28 Aug 2005 12:36:39 GMT</pubDate></item><item><title><![CDATA[Reply to speicherallokierung und -freigabe... on Sun, 28 Aug 2005 14:50:55 GMT]]></title><description><![CDATA[<p>cppLer schrieb:</p>
<blockquote>
<blockquote>
<p>if the value of the operand of <strong>delete</strong> is the null pointer the operation has no effect</p>
</blockquote>
<p>bezieht sich das auch wirklich auf <strong>[]delete</strong> ???<br />
steht ja nur ohne Klammern da ... .</p>
</blockquote>
<p>JA... delete[] kann gar keine Exception werfen:</p>
<pre><code class="language-cpp">void operator delete[](void* ptr, void*) throw();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/860128</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/860128</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Sun, 28 Aug 2005 14:50:55 GMT</pubDate></item></channel></rss>