<?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[struct und malloc - Was mache ich falsch?]]></title><description><![CDATA[<p>Hallo Leute, ich stehe gerade irgendwie auf dem Schlauch. Ich dachte <strong>new</strong> und <strong>malloc</strong> machen das gleiche. Wahrscheinlich mache ich aber bei der Anwendung von malloc was falsch...</p>
<pre><code class="language-cpp">struct Verwaltung
{
  std::vector&lt;int&gt; nummern;
};

int _tmain(int argc, _TCHAR* argv[])
{
  struct Verwaltung* sv0 = new struct Verwaltung;
  sv0-&gt;nummern.push_back(0);
  struct Verwaltung* sv1 = (struct Verwaltung*)malloc(sizeof(struct Verwaltung));
  printf(&quot;Hier 0\n&quot;);	
  sv1-&gt;nummern.push_back(0); //Crash...
  printf(&quot;Hier 1\n&quot;);	

  system(&quot;pause&quot;);
</code></pre>
<p>Ausgabe:</p>
<pre><code>Hier 0
</code></pre>
<p>Wieso geht das mit new aber mit malloc nicht? Mache ich etwas falsch?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/279171/struct-und-malloc-was-mache-ich-falsch</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 19:02:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/279171.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 20 Dec 2010 11:26:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to struct und malloc - Was mache ich falsch? on Mon, 20 Dec 2010 11:26:51 GMT]]></title><description><![CDATA[<p>Hallo Leute, ich stehe gerade irgendwie auf dem Schlauch. Ich dachte <strong>new</strong> und <strong>malloc</strong> machen das gleiche. Wahrscheinlich mache ich aber bei der Anwendung von malloc was falsch...</p>
<pre><code class="language-cpp">struct Verwaltung
{
  std::vector&lt;int&gt; nummern;
};

int _tmain(int argc, _TCHAR* argv[])
{
  struct Verwaltung* sv0 = new struct Verwaltung;
  sv0-&gt;nummern.push_back(0);
  struct Verwaltung* sv1 = (struct Verwaltung*)malloc(sizeof(struct Verwaltung));
  printf(&quot;Hier 0\n&quot;);	
  sv1-&gt;nummern.push_back(0); //Crash...
  printf(&quot;Hier 1\n&quot;);	

  system(&quot;pause&quot;);
</code></pre>
<p>Ausgabe:</p>
<pre><code>Hier 0
</code></pre>
<p>Wieso geht das mit new aber mit malloc nicht? Mache ich etwas falsch?</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997111</guid><dc:creator><![CDATA[SchlechterInformatiker]]></dc:creator><pubDate>Mon, 20 Dec 2010 11:26:51 GMT</pubDate></item><item><title><![CDATA[Reply to struct und malloc - Was mache ich falsch? on Mon, 20 Dec 2010 11:28:38 GMT]]></title><description><![CDATA[<p>SchlechterInformatiker schrieb:</p>
<blockquote>
<p>Ich dachte <strong>new</strong> und <strong>malloc</strong> machen das gleiche.</p>
</blockquote>
<p>Nö.</p>
<p>Malloc ruft insbesondere keine Konstruktoren auf. Darum ist malloc nur für POD geeignet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997113</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 20 Dec 2010 11:28:38 GMT</pubDate></item><item><title><![CDATA[Reply to struct und malloc - Was mache ich falsch? on Mon, 20 Dec 2010 11:29:33 GMT]]></title><description><![CDATA[<p><code>new</code> ist C++ und ruft vorhandende Konstruktoren korrekt auf, z.B. von <code>std::vector</code> .<br />
<code>malloc</code> ist C und kennt keine Konstruktoren. Demenstsprechend werden Objekte, deren Klassen konstruktoren haben, nicht korrekt konstruiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997114</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 20 Dec 2010 11:29:33 GMT</pubDate></item><item><title><![CDATA[Reply to struct und malloc - Was mache ich falsch? on Mon, 20 Dec 2010 11:39:12 GMT]]></title><description><![CDATA[<p>Dafür gibt es Placement-New. Das ruft für dich den Constructor auf und erstellt ein Objekt in einem vorher bereit gestellten Speicherbereich.<br />
Das ist übrigens der einzige Fall, wo es erlaubt ist den Destruktor explizit aufzurufen. Erlaubt sind verbotene Dinge immer dann, wenn es keinen anderen Weg dafür gibt. Sprich es gibt kein Placement-Delete.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997121</guid><dc:creator><![CDATA[Paul Müller]]></dc:creator><pubDate>Mon, 20 Dec 2010 11:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to struct und malloc - Was mache ich falsch? on Mon, 20 Dec 2010 12:02:55 GMT]]></title><description><![CDATA[<p>Ja ok, sowas dachte ich mir fast schon. Aber wenn ich malloc benutze, dann müsste es doch möglich sein,<br />
dass ich den Konstruktor von std::vector&lt;int&gt; selber aufrufe, oder?<br />
Also hoffentlich blamiere ich mich jetzt nicht:</p>
<pre><code class="language-cpp">struct Verwaltung
{
  std::vector&lt;int&gt; nummern;
};

int _tmain(int argc, _TCHAR* argv[])
{
  struct Verwaltung* sv0 = new struct Verwaltung;
  sv0-&gt;nummern.push_back(0);
  struct Verwaltung* sv1 = (struct Verwaltung*)malloc(sizeof(struct Verwaltung));
  sv1-&gt;nummern = std::vector&lt;int&gt;();
  printf(&quot;Hier 0\n&quot;);   
  sv1-&gt;nummern.push_back(0); //Crash...
  printf(&quot;Hier 1\n&quot;);   

  system(&quot;pause&quot;);
</code></pre>
<p>Das stürzt aber genauso ab...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997133</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997133</guid><dc:creator><![CDATA[SchlechterInformatiker]]></dc:creator><pubDate>Mon, 20 Dec 2010 12:02:55 GMT</pubDate></item><item><title><![CDATA[Reply to struct und malloc - Was mache ich falsch? on Mon, 20 Dec 2010 12:04:44 GMT]]></title><description><![CDATA[<p>SchlechterInformatiker schrieb:</p>
<blockquote>
<p>Aber wenn ich malloc benutze, dann müsste es doch möglich sein,<br />
dass ich den Konstruktor von std::vector&lt;int&gt; selber aufrufe, oder?</p>
</blockquote>
<p>Du rufst da aber nicht nur den Konstruktor auf, sondern auch den Zuweisungsoperator. Von einem Vector, dessen Konstruktor nie aufgerufen wurde.</p>
<p>Das Stichwort placement new hast du ja schon bekommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997134</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 20 Dec 2010 12:04:44 GMT</pubDate></item><item><title><![CDATA[Reply to struct und malloc - Was mache ich falsch? on Mon, 20 Dec 2010 12:36:48 GMT]]></title><description><![CDATA[<p>Ja ok, dann hab ich wohl irgendwann mal was falsch verstanden. Dann benutz ich halt das ganz normale <strong>new</strong> und lass die Finger von alten C-Reliketen und gut is...</p>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1997151</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997151</guid><dc:creator><![CDATA[SchlechterInformatiker]]></dc:creator><pubDate>Mon, 20 Dec 2010 12:36:48 GMT</pubDate></item><item><title><![CDATA[Reply to struct und malloc - Was mache ich falsch? on Mon, 20 Dec 2010 14:09:08 GMT]]></title><description><![CDATA[<p>Lass das <code>new</code> ganz weg, gerade in <code>main</code> braucht es das wirklich nicht.</p>
<pre><code class="language-cpp">struct Verwaltung {
  std::vector&lt;int&gt; nummern;
};

int main()
{
  Verwaltung sv0;
  sv0.nummern.push_back(0);
  Verwaltung sv1;
  sv1.nummern.push_back(0);
  std::cout &lt;&lt; &quot;Hier fertig&quot; &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1997230</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1997230</guid><dc:creator><![CDATA[BraverInformatiker]]></dc:creator><pubDate>Mon, 20 Dec 2010 14:09:08 GMT</pubDate></item></channel></rss>