<?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[Problem mit malloc() und free()]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich bin nicht sicher ob das ins C oder ins WinApi Forum gehört, da die Anwendung aber mit WinApi Fenster erstellt und WinSock nutzt, poste ich es hier.</p>
<p>Also ich will eine Datei übertragen. Das funktioniert auch halbwegs, aber es werden immer nur 4 Byte übertragen. Da sizeof() für den resevierten Speicherbereich der Datei immer 4 Byte anzeigt, glaube ich das es an malloc liegt. Es scheint so als würde malloc irgendwie immer nur 4Byte reservieren, egal was für einen Zahlenwert ich übergebe. Wie kann das sein?</p>
<pre><code class="language-cpp">while(!i-&gt;close)
	{
		FD_ZERO(&amp;fdset);
		FD_SET(i-&gt;socket,&amp;fdset);
		select(0,&amp;fdset,0,0,const_cast&lt;timeval*&gt;(&amp;time));						//Überprüfen ob Daten zu empfangen sind,
		if(FD_ISSET(i-&gt;socket, &amp;fdset))															//wenn ja ist in fdset das Socket noch vorhanden
		{
			recv(i-&gt;socket,empf_daten,255,0);													//Dateigröße empfangen
			size = atoi(empf_daten);																	//Dateigröße in int Wert umwandeln
			sprintf(empf_daten,&quot;Size: %i&quot;,size);
			MessageBox(0,empf_daten,0,0);															//Dateigröße ausgeben
			recv(i-&gt;socket,empf_daten,255,0);													//Dateiname empfangen
			filename_short = empf_daten;															//Dateiname speichern
			char* datei = (char*) malloc(size);	 											//Speicher für die zu übertragende Datei resevieren, der größe der Datei entsprechend
			recv(i-&gt;socket,datei,size,0);															//Datei empfangen
			filename = &quot;&quot;;																						//Vollen Dateipfad zum speichern erzeugen
			filename.append(i-&gt;recvPfad);															// &quot;-&quot;
			filename.append(filename_short);													// &quot;-&quot;
			SaveFile(filename,datei);																	//Datei speichern
			free(datei);																							//Speicher mit empfangener Datei wieder freigeben
		}
		if(!i-&gt;filenames.empty())																		//Überprüfen ob Daten zu senden sind
		{
			filename = i-&gt;filenames.front();													//Ersten Dateinamen herausfinden
			i-&gt;filenames.pop_front();																	//und aus der &quot;zu senden Schlange&quot; löschen
			size = getFileSize(filename);															//Dateigröße für die zu sende Datei herausfinden
			sprintf(send_daten,&quot;%i&quot;,size);														//Dateigröße in Integerwert umwandeln
			send(i-&gt;socket,send_daten,255,0);													//Dateigröße senden
			filename_short = GetBaseName(filename);										//Pfadangaben herausfiltern
			strcpy(send_daten, filename_short.c_str());								//String in CString kopieren
			send(i-&gt;socket,send_daten,255,0);													//Dateinamen übertragen
			char* datei = (char*) malloc(size);												//Speicher für die zu übertragende Datei resevieren, der größe der Datei entsprechend
			sprintf(debug_buf, &quot;Size des senders: %i&quot;, sizeof(datei));
			MessageBox(0,debug_buf,0,0);
			LoadFile(filename, datei);																//Datei in das char Array laden
			send(i-&gt;socket,datei,size,0);															//Datei senden
			free(datei);																						//Speicher wieder freigeben;
		}
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/117619/problem-mit-malloc-und-free</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 12:11:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/117619.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 09 Aug 2005 14:06:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit malloc() und free() on Tue, 09 Aug 2005 14:06:24 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Ich bin nicht sicher ob das ins C oder ins WinApi Forum gehört, da die Anwendung aber mit WinApi Fenster erstellt und WinSock nutzt, poste ich es hier.</p>
<p>Also ich will eine Datei übertragen. Das funktioniert auch halbwegs, aber es werden immer nur 4 Byte übertragen. Da sizeof() für den resevierten Speicherbereich der Datei immer 4 Byte anzeigt, glaube ich das es an malloc liegt. Es scheint so als würde malloc irgendwie immer nur 4Byte reservieren, egal was für einen Zahlenwert ich übergebe. Wie kann das sein?</p>
<pre><code class="language-cpp">while(!i-&gt;close)
	{
		FD_ZERO(&amp;fdset);
		FD_SET(i-&gt;socket,&amp;fdset);
		select(0,&amp;fdset,0,0,const_cast&lt;timeval*&gt;(&amp;time));						//Überprüfen ob Daten zu empfangen sind,
		if(FD_ISSET(i-&gt;socket, &amp;fdset))															//wenn ja ist in fdset das Socket noch vorhanden
		{
			recv(i-&gt;socket,empf_daten,255,0);													//Dateigröße empfangen
			size = atoi(empf_daten);																	//Dateigröße in int Wert umwandeln
			sprintf(empf_daten,&quot;Size: %i&quot;,size);
			MessageBox(0,empf_daten,0,0);															//Dateigröße ausgeben
			recv(i-&gt;socket,empf_daten,255,0);													//Dateiname empfangen
			filename_short = empf_daten;															//Dateiname speichern
			char* datei = (char*) malloc(size);	 											//Speicher für die zu übertragende Datei resevieren, der größe der Datei entsprechend
			recv(i-&gt;socket,datei,size,0);															//Datei empfangen
			filename = &quot;&quot;;																						//Vollen Dateipfad zum speichern erzeugen
			filename.append(i-&gt;recvPfad);															// &quot;-&quot;
			filename.append(filename_short);													// &quot;-&quot;
			SaveFile(filename,datei);																	//Datei speichern
			free(datei);																							//Speicher mit empfangener Datei wieder freigeben
		}
		if(!i-&gt;filenames.empty())																		//Überprüfen ob Daten zu senden sind
		{
			filename = i-&gt;filenames.front();													//Ersten Dateinamen herausfinden
			i-&gt;filenames.pop_front();																	//und aus der &quot;zu senden Schlange&quot; löschen
			size = getFileSize(filename);															//Dateigröße für die zu sende Datei herausfinden
			sprintf(send_daten,&quot;%i&quot;,size);														//Dateigröße in Integerwert umwandeln
			send(i-&gt;socket,send_daten,255,0);													//Dateigröße senden
			filename_short = GetBaseName(filename);										//Pfadangaben herausfiltern
			strcpy(send_daten, filename_short.c_str());								//String in CString kopieren
			send(i-&gt;socket,send_daten,255,0);													//Dateinamen übertragen
			char* datei = (char*) malloc(size);												//Speicher für die zu übertragende Datei resevieren, der größe der Datei entsprechend
			sprintf(debug_buf, &quot;Size des senders: %i&quot;, sizeof(datei));
			MessageBox(0,debug_buf,0,0);
			LoadFile(filename, datei);																//Datei in das char Array laden
			send(i-&gt;socket,datei,size,0);															//Datei senden
			free(datei);																						//Speicher wieder freigeben;
		}
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/848757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848757</guid><dc:creator><![CDATA[flammenvogel]]></dc:creator><pubDate>Tue, 09 Aug 2005 14:06:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit malloc() und free() on Tue, 09 Aug 2005 14:12:57 GMT]]></title><description><![CDATA[<p>malloc gibt dir einen pointer zurück und die grösse eines pointers ist auf deinem system 4 bytes;<br />
Kurt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848761</guid><dc:creator><![CDATA[ZuK]]></dc:creator><pubDate>Tue, 09 Aug 2005 14:12:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit malloc() und free() on Tue, 09 Aug 2005 14:35:43 GMT]]></title><description><![CDATA[<p>Bei recv() unbedingt den Rückgabewert prüfen!<br />
Wenn man recv(socket,buffer,100,0) aufruft, sind nicht notwendigerweise auch 100 Bytes in buffer gelandet. Möglicherweise muss recv() mehrmals aufgerufen werden bis man insgesamt 100 Bytes eingelesen hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848779</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848779</guid><dc:creator><![CDATA[geeky (not@home)]]></dc:creator><pubDate>Tue, 09 Aug 2005 14:35:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit malloc() und free() on Tue, 09 Aug 2005 14:53:15 GMT]]></title><description><![CDATA[<p>jetzt gehts, thk</p>
<p>Könnte mir nochmal einer sagen wieviel speicher man maximal mit malloc() reservieren kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848790</guid><dc:creator><![CDATA[flammenvogel]]></dc:creator><pubDate>Tue, 09 Aug 2005 14:53:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit malloc() und free() on Tue, 09 Aug 2005 15:15:37 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/41">@geeky</a>:</p>
<p>wird das char, in dem recv die daten speichert, wenn ich mehrmals recv aufrufe gelöscht oder wird das neu empfangende immer angehängt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848809</guid><dc:creator><![CDATA[flammenvogel]]></dc:creator><pubDate>Tue, 09 Aug 2005 15:15:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit malloc() und free() on Tue, 09 Aug 2005 15:47:36 GMT]]></title><description><![CDATA[<p>der buffer wird überschrieben <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=";D"
      alt="😉"
    /></p>
<p>Ich glaub malloc() kann soviel Speicher reservieren wie virtueller Arbeitsspeicher für die Anwendung da ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848822</guid><dc:creator><![CDATA[geeky]]></dc:creator><pubDate>Tue, 09 Aug 2005 15:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit malloc() und free() on Tue, 09 Aug 2005 17:25:18 GMT]]></title><description><![CDATA[<p>und wieviel sind das so im durchschnitt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848881</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848881</guid><dc:creator><![CDATA[flammenvogel]]></dc:creator><pubDate>Tue, 09 Aug 2005 17:25:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit malloc() und free() on Tue, 09 Aug 2005 17:38:40 GMT]]></title><description><![CDATA[<p>4GB</p>
<p>Abzüglich dessen, was durch das OS geschluckt wird...</p>
<p>PS: Im flat mode</p>
]]></description><link>https://www.c-plusplus.net/forum/post/848887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/848887</guid><dc:creator><![CDATA[nirsaja]]></dc:creator><pubDate>Tue, 09 Aug 2005 17:38:40 GMT</pubDate></item></channel></rss>