<?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[Speicher mit GlobalAlloc]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich gebe speicher frei:</p>
<pre><code class="language-cpp">std::string gleichung;
z = sizeof(gleichung);

GlobalAlloc(GMEM_FIXED,z);
</code></pre>
<p>... der hat genauso viele Bytes wie mein String.<br />
1. Jetzt kapier ich aber nicht wie ich den String &quot;gleichung&quot; genau in den von mir frei gemachten Speicher schreibe.<br />
2. Wie kann ich dann herausfinden wo genau sich der Speicher mit meinem String befindet, also ich brauche die Adresse, geht das mit dem Adressoperator oder gibts da was anderes?</p>
<p>THX for HELP <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/topic/186064/speicher-mit-globalalloc</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 07:10:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186064.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Jul 2007 15:35:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicher mit GlobalAlloc on Wed, 04 Jul 2007 15:35:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich gebe speicher frei:</p>
<pre><code class="language-cpp">std::string gleichung;
z = sizeof(gleichung);

GlobalAlloc(GMEM_FIXED,z);
</code></pre>
<p>... der hat genauso viele Bytes wie mein String.<br />
1. Jetzt kapier ich aber nicht wie ich den String &quot;gleichung&quot; genau in den von mir frei gemachten Speicher schreibe.<br />
2. Wie kann ich dann herausfinden wo genau sich der Speicher mit meinem String befindet, also ich brauche die Adresse, geht das mit dem Adressoperator oder gibts da was anderes?</p>
<p>THX for HELP <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/1318354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318354</guid><dc:creator><![CDATA[RunSeb]]></dc:creator><pubDate>Wed, 04 Jul 2007 15:35:34 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher mit GlobalAlloc on Wed, 04 Jul 2007 17:30:02 GMT]]></title><description><![CDATA[<p>RunSeb schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>ich gebe speicher frei:</p>
</blockquote>
<p>Wo?</p>
<blockquote>
<pre><code class="language-cpp">std::string gleichung;
z = sizeof(gleichung);

GlobalAlloc(GMEM_FIXED,z);
</code></pre>
<p>... der hat genauso viele Bytes wie mein String.</p>
</blockquote>
<p>Bist du sicher, dass du sizeof(gleichung) und nicht gleichung.size() willst?</p>
<blockquote>
<p>1. Jetzt kapier ich aber nicht wie ich den String &quot;gleichung&quot; genau in den von mir frei gemachten Speicher schreibe.<br />
2. Wie kann ich dann herausfinden wo genau sich der Speicher mit meinem String befindet, also ich brauche die Adresse, geht das mit dem Adressoperator oder gibts da was anderes?</p>
</blockquote>
<p>Mir scheint du hast noch ein paar grundlegende Verständnisprobleme. Was *genau* möchtest du denn erreichen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318425</guid><dc:creator><![CDATA[HumeSikkins]]></dc:creator><pubDate>Wed, 04 Jul 2007 17:30:02 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher mit GlobalAlloc on Wed, 04 Jul 2007 18:15:38 GMT]]></title><description><![CDATA[<p>Ich möchte das der Inhalt des Strings &quot;gleichung&quot; in einen von mir allozierten Speicherbereich steht. Das wollte ich eigentlich mit GlobalAlloc machen.<br />
Das ich Verständnisprobleme hab ist mir schon klar, darum frag ich auch hier mal nach. <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/1318454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318454</guid><dc:creator><![CDATA[RunSeb]]></dc:creator><pubDate>Wed, 04 Jul 2007 18:15:38 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher mit GlobalAlloc on Wed, 04 Jul 2007 18:18:25 GMT]]></title><description><![CDATA[<p>sizeof( gleichung ) gibt dir nicht die Länge des strings zurück sondern die größe des String-Objekts (was <strong>nicht</strong> zwangsläufig eqivalent zur Länge des Strings ist). <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="😉"
    /> Dafür hat std::string die Methode size().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318457</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318457</guid><dc:creator><![CDATA[David_pb]]></dc:creator><pubDate>Wed, 04 Jul 2007 18:18:25 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher mit GlobalAlloc on Wed, 04 Jul 2007 18:34:43 GMT]]></title><description><![CDATA[<p>OK, das ist mir jetzt klar.</p>
<pre><code class="language-cpp">z = gleichung.size();
</code></pre>
<p>aber wie bekomm ich den String jetzt in den Speicher?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318472</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318472</guid><dc:creator><![CDATA[RunSeb]]></dc:creator><pubDate>Wed, 04 Jul 2007 18:34:43 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher mit GlobalAlloc on Wed, 04 Jul 2007 19:17:12 GMT]]></title><description><![CDATA[<p>An die Daten des Strings kommst du mit str.data() (Ohne \0-terminierung) bzw. str.c_str() (mit \0 am Ende, also als c-string)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318499</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Wed, 04 Jul 2007 19:17:12 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher mit GlobalAlloc on Thu, 05 Jul 2007 06:19:30 GMT]]></title><description><![CDATA[<p>Wenn du willst, daß ein std::string seine Daten über GlobalAlloc()/GlobalFree() verwaltet anstelle von new[]/delete[], mußt du einen eigenen Allocator schreiben, der diese Funktionen zur Speicherveraltung verwendet - und den an basic_string mitgeben:</p>
<pre><code class="language-cpp">//hier kannst du die Klasse std::allocator&lt;&gt; als Vorbild nehmen
template&lt;typename T&gt;
class GlobalAllocator
{
  ...
};

//um Schreibarbeit zu sparen - ein GA_String funktioniert wie ein normaler string,
//aber nutzt GlobalAlloc() und Co. zur Speicherverwaltung
typedef std::basic_string&lt;char,char_traits&lt;char&gt;,GlobalAllocator&lt;char&gt; &gt; GA_String;
</code></pre>
<p>PS: Einige Informationen zu dem Thema findest du auch in meinem Magazin-Artikel &quot;Speicherverwaltung in C++ (und C)&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1318624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318624</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 05 Jul 2007 06:19:30 GMT</pubDate></item><item><title><![CDATA[Reply to Speicher mit GlobalAlloc on Thu, 05 Jul 2007 08:44:56 GMT]]></title><description><![CDATA[<p>Das mit dem Allocator ist eine verdammt saubere Lösung!</p>
<p>Aber nur um deine Anfrage anders zu interpretieren (der Inhalt des Strings soll in einen Speicherbereich, geholt mit GlobalAlloc, kopiert werden):</p>
<pre><code class="language-cpp">std::string gleichung;
size_t z = gleichung.size()+1; // Damit auch die '\0' am Ende mit dabei ist
char* sPtr = (char*) GlobalAlloc( GMEM_FIXED, z );
memcpy( sPtr, gleichung.c_str(), z );

...
// Irgendwas mit machen:
sPtr[0] = 'a'; // Davon bleibt &quot;gleichung&quot; unverändert, weil sPtr eine Kopie ist
gleichung.reverse(); // Davon bleibt der Speicherbereich in sPtr unverändert
...

GlobalFree( (HANDLE) sPtr );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1318717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1318717</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Thu, 05 Jul 2007 08:44:56 GMT</pubDate></item></channel></rss>