<?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[Das alt bekannte Problem mit den Pointern]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich Arbeite immoment an einer HTTP-Klasse und möchte dem Benutzer die Möglichkeit geben, den Content in eine Datei oder direkt in den Arbeitsspeicher schreiben zu lassen. Das mit der Datei funktioniert mittlerweile einwandfrei nur beim Arbeitsspeicher gibt es einen Sigmentation Fault Fehler also eine Zugriffsverletzung.<br />
Mein Code sieht vereinfacht so aus:</p>
<pre><code class="language-cpp">else
            {
                cout &lt;&lt; &quot;Downloading... (Chunked)&quot; &lt;&lt; endl;
                while(true)
                {
                    stringstream sstream;
                    GetLine(Socket, sstream);
                    int chunkSize = -1;
                    sstream &gt;&gt; hex &gt;&gt; chunkSize; // Größe des nächsten Parts einlesen
                    if(chunkSize &lt;= 0)
                    {
                        break;
                    }
                    cout &lt;&lt; &quot;Downloading Part (&quot; &lt;&lt; chunkSize &lt;&lt; &quot; Bytes)... &quot; &lt;&lt; endl;
                    recvSize = 0; // Vor jeder Schleife wieder auf 0 setzen
                    bool FirstTime = true;
                    while(recvSize &lt; chunkSize)
                    {
                        int bytesToRecv = chunkSize - recvSize;
                        if((bytesRecv = recv(Socket, buf, bytesToRecv &gt; sizeof(buf) ? sizeof(buf) : bytesToRecv, 0)) &lt;= 0)
                        {
                            throw CreateSocketError();
                        }
                        recvSize += bytesRecv;
                        if(request.isbuffer == false)
                          {
                             fout.write(buf, bytesRecv);
                          }
                        else
                          {
                              if(FirstTime == true)
                              {
                                  strcpy(response.data, buf);
                                  FirstTime = false;
                              }
                             else
                             strcat(response.data,buf);

                          }
                        cout &lt;&lt; &quot;\r&quot; &lt;&lt; recvSize * 100 / chunkSize &lt;&lt; &quot;%&quot; &lt;&lt; flush;
                    }
                    cout &lt;&lt; endl;
                    for(int i = 0; i &lt; 2; ++i)
                    {
                        char temp;
                        recv(Socket, &amp;temp, 1, 0);
                    }
                }
            }
</code></pre>
<p>Die response Klasse sieht so aus:</p>
<pre><code class="language-cpp">class HTTP_RESPONSE
{
    public:
    bool ConnErr;
    bool HTTP_VERSION ;
    short HTTP_STATUS;
    std::string Server;
    std::string ContentType;
    int ContentLength;
    std::string TransferEncoding;
    std::string Connection ;
    std::string Cookie;
    //Hier muss noch eine Klasse für Cookies implementiert werden
    //The Pointer to char for the stuff the server gives you
    char * data;
    HTTP_RESPONSE()
    :ConnErr(true),HTTP_VERSION(HTTP_1_1),ContentLength(-1)
    {
    }
};
</code></pre>
<p>Kann mir vielleicht erklären was ich mit den char * falsch mache?</p>
<p>Mfg cobra11freak</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/262445/das-alt-bekannte-problem-mit-den-pointern</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 15:07:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/262445.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 06 Mar 2010 10:12:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Das alt bekannte Problem mit den Pointern on Sat, 06 Mar 2010 10:12:24 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich Arbeite immoment an einer HTTP-Klasse und möchte dem Benutzer die Möglichkeit geben, den Content in eine Datei oder direkt in den Arbeitsspeicher schreiben zu lassen. Das mit der Datei funktioniert mittlerweile einwandfrei nur beim Arbeitsspeicher gibt es einen Sigmentation Fault Fehler also eine Zugriffsverletzung.<br />
Mein Code sieht vereinfacht so aus:</p>
<pre><code class="language-cpp">else
            {
                cout &lt;&lt; &quot;Downloading... (Chunked)&quot; &lt;&lt; endl;
                while(true)
                {
                    stringstream sstream;
                    GetLine(Socket, sstream);
                    int chunkSize = -1;
                    sstream &gt;&gt; hex &gt;&gt; chunkSize; // Größe des nächsten Parts einlesen
                    if(chunkSize &lt;= 0)
                    {
                        break;
                    }
                    cout &lt;&lt; &quot;Downloading Part (&quot; &lt;&lt; chunkSize &lt;&lt; &quot; Bytes)... &quot; &lt;&lt; endl;
                    recvSize = 0; // Vor jeder Schleife wieder auf 0 setzen
                    bool FirstTime = true;
                    while(recvSize &lt; chunkSize)
                    {
                        int bytesToRecv = chunkSize - recvSize;
                        if((bytesRecv = recv(Socket, buf, bytesToRecv &gt; sizeof(buf) ? sizeof(buf) : bytesToRecv, 0)) &lt;= 0)
                        {
                            throw CreateSocketError();
                        }
                        recvSize += bytesRecv;
                        if(request.isbuffer == false)
                          {
                             fout.write(buf, bytesRecv);
                          }
                        else
                          {
                              if(FirstTime == true)
                              {
                                  strcpy(response.data, buf);
                                  FirstTime = false;
                              }
                             else
                             strcat(response.data,buf);

                          }
                        cout &lt;&lt; &quot;\r&quot; &lt;&lt; recvSize * 100 / chunkSize &lt;&lt; &quot;%&quot; &lt;&lt; flush;
                    }
                    cout &lt;&lt; endl;
                    for(int i = 0; i &lt; 2; ++i)
                    {
                        char temp;
                        recv(Socket, &amp;temp, 1, 0);
                    }
                }
            }
</code></pre>
<p>Die response Klasse sieht so aus:</p>
<pre><code class="language-cpp">class HTTP_RESPONSE
{
    public:
    bool ConnErr;
    bool HTTP_VERSION ;
    short HTTP_STATUS;
    std::string Server;
    std::string ContentType;
    int ContentLength;
    std::string TransferEncoding;
    std::string Connection ;
    std::string Cookie;
    //Hier muss noch eine Klasse für Cookies implementiert werden
    //The Pointer to char for the stuff the server gives you
    char * data;
    HTTP_RESPONSE()
    :ConnErr(true),HTTP_VERSION(HTTP_1_1),ContentLength(-1)
    {
    }
};
</code></pre>
<p>Kann mir vielleicht erklären was ich mit den char * falsch mache?</p>
<p>Mfg cobra11freak</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1865072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1865072</guid><dc:creator><![CDATA[cobra11freak]]></dc:creator><pubDate>Sat, 06 Mar 2010 10:12:24 GMT</pubDate></item><item><title><![CDATA[Reply to Das alt bekannte Problem mit den Pointern on Sat, 06 Mar 2010 10:24:03 GMT]]></title><description><![CDATA[<p>Du musst schon Speicher für deinen <code>char*</code> reservieren. Aber da gibts bessere Möglichkeiten als sich mit manueller Speicherverwaltung durchzuschlagen, z.B. <code>std::vector&lt;char&gt;</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1865075</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1865075</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 06 Mar 2010 10:24:03 GMT</pubDate></item><item><title><![CDATA[Reply to Das alt bekannte Problem mit den Pointern on Sat, 06 Mar 2010 11:19:31 GMT]]></title><description><![CDATA[<p>Hi<br />
Vielen Dank für die Antwort.<br />
Daran habe ich auch schon gedacht, ich dachte nur, das die vector Nutzung vielleicht erhebliche Geschwindigkeitsverluste mit sich bringt.<br />
Trotzdem werde ich das jetzt ersmal so machen.</p>
<p>MfG cobra11freak</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1865092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1865092</guid><dc:creator><![CDATA[cobra11freak]]></dc:creator><pubDate>Sat, 06 Mar 2010 11:19:31 GMT</pubDate></item><item><title><![CDATA[Reply to Das alt bekannte Problem mit den Pointern on Sat, 06 Mar 2010 11:26:10 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich kann dann aber nur einzelne Zeichen übergeben, nicht gleich meinen ganzen buffer. Gibt es da nicht irgendwie effizientere Methoden?</p>
<p>MfG cobra11freak</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1865096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1865096</guid><dc:creator><![CDATA[cobra11freak]]></dc:creator><pubDate>Sat, 06 Mar 2010 11:26:10 GMT</pubDate></item><item><title><![CDATA[Reply to Das alt bekannte Problem mit den Pointern on Sat, 06 Mar 2010 11:34:18 GMT]]></title><description><![CDATA[<p>cobra11freak schrieb:</p>
<blockquote>
<p>ich dachte nur, das die vector Nutzung vielleicht erhebliche Geschwindigkeitsverluste mit sich bringt.</p>
</blockquote>
<p>Worauf basiert deine Vermutung?</p>
<p>cobra11freak schrieb:</p>
<blockquote>
<p>Ich kann dann aber nur einzelne Zeichen übergeben, nicht gleich meinen ganzen buffer. Gibt es da nicht irgendwie effizientere Methoden?</p>
</blockquote>
<p>Natürlich kannst du den ganzen Puffer übergeben. Z.B. Mit dem Konstruktor oder <code>assign()</code> . Siehe <a href="http://www.cplusplus.com/reference/stl/vector/" rel="nofollow">http://www.cplusplus.com/reference/stl/vector/</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1865097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1865097</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 06 Mar 2010 11:34:18 GMT</pubDate></item><item><title><![CDATA[Reply to Das alt bekannte Problem mit den Pointern on Sat, 06 Mar 2010 17:22:18 GMT]]></title><description><![CDATA[<p>Hi</p>
<p>Ich kann dann aber nur einzelne Zeichen übergeben, nicht gleich meinen ganzen buffer. Gibt es da nicht irgendwie effizientere Methoden?</p>
<p>MfG cobra11freak</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1865209</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1865209</guid><dc:creator><![CDATA[cobra11freak]]></dc:creator><pubDate>Sat, 06 Mar 2010 17:22:18 GMT</pubDate></item><item><title><![CDATA[Reply to Das alt bekannte Problem mit den Pointern on Sat, 06 Mar 2010 17:26:23 GMT]]></title><description><![CDATA[<p>Du wiederholst dich... <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1865211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1865211</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 06 Mar 2010 17:26:23 GMT</pubDate></item></channel></rss>