<?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[Lebensdauer von String Listen]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>ich habe mal eine Frage zur Lebensdauer von Stringlisten wenn sie über ein Ereignis hinaus verwendet werden sollen, also nicht klassisch &quot;Anlegen, Verwenden, Freigeben&quot;.</p>
<p>Wenn ich die Stringliste in meine Klasse aufnehme kann ich sie nicht am Ende einfach deleten, selbst ein einfaches stringliste-&gt;Clear() wird Stellenweiße mit einem Access Error bestraft.</p>
<p>Beschreibung: Im onreceive Ereignis eines UDP Sockets werden die übermittelten Strings in die StringListe aufgenommen. Da die informationen über mehrere Packete gesendet wird wird auch das onreceive mehrmals ausgelöst, logisch. Wie kann ich in dem Falle die Stringliste gescheit &quot;Anlegen,Verwenden,Verwenden,Verwenden,Freigeben&quot; ??</p>
<p>Erster Erfolg:<br />
Ich habe das Problem mit einer global angelegten Stringliste versucht zu lösen, auch das Füllen der Stringliste ist kein Thema, auch das es über mehrmals ausgelöste Ereignisse funktioniert. Doch ab und an wenn ich vor einer neuen Verwendung der Stringliste deren inhalt mit stringliste-&gt;Clear() lösche um eben eine leere Liste zu erhalten bekomme ich ab und denn einen ganz Merkwürdigen Access Error <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="😕"
    /> hundert mal funktioniert der Code und beim nächsten mal gibts wieder nen Acess Error.</p>
<p>Wenn ich stringliste-&gt;Clear() weglasse läuft der Code wie ne 1. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Für kleine Codebeispiele wäre ich sehr dankbar weil ich wegen diesem Problem kurz davor bin in eine geschlossene Psychatrie eingeliefert zu werden da mich das Problem schon fast einen Monat lang nervt. HELP !!!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/93548/lebensdauer-von-string-listen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Jul 2026 00:31:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/93548.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Nov 2004 12:31:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Lebensdauer von String Listen on Tue, 30 Nov 2004 12:34:14 GMT]]></title><description><![CDATA[<p>Guten Tag,</p>
<p>ich habe mal eine Frage zur Lebensdauer von Stringlisten wenn sie über ein Ereignis hinaus verwendet werden sollen, also nicht klassisch &quot;Anlegen, Verwenden, Freigeben&quot;.</p>
<p>Wenn ich die Stringliste in meine Klasse aufnehme kann ich sie nicht am Ende einfach deleten, selbst ein einfaches stringliste-&gt;Clear() wird Stellenweiße mit einem Access Error bestraft.</p>
<p>Beschreibung: Im onreceive Ereignis eines UDP Sockets werden die übermittelten Strings in die StringListe aufgenommen. Da die informationen über mehrere Packete gesendet wird wird auch das onreceive mehrmals ausgelöst, logisch. Wie kann ich in dem Falle die Stringliste gescheit &quot;Anlegen,Verwenden,Verwenden,Verwenden,Freigeben&quot; ??</p>
<p>Erster Erfolg:<br />
Ich habe das Problem mit einer global angelegten Stringliste versucht zu lösen, auch das Füllen der Stringliste ist kein Thema, auch das es über mehrmals ausgelöste Ereignisse funktioniert. Doch ab und an wenn ich vor einer neuen Verwendung der Stringliste deren inhalt mit stringliste-&gt;Clear() lösche um eben eine leere Liste zu erhalten bekomme ich ab und denn einen ganz Merkwürdigen Access Error <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="😕"
    /> hundert mal funktioniert der Code und beim nächsten mal gibts wieder nen Acess Error.</p>
<p>Wenn ich stringliste-&gt;Clear() weglasse läuft der Code wie ne 1. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p>Für kleine Codebeispiele wäre ich sehr dankbar weil ich wegen diesem Problem kurz davor bin in eine geschlossene Psychatrie eingeliefert zu werden da mich das Problem schon fast einen Monat lang nervt. HELP !!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/662713</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/662713</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Tue, 30 Nov 2004 12:34:14 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer von String Listen on Tue, 30 Nov 2004 15:43:27 GMT]]></title><description><![CDATA[<p>Zero01 schrieb:</p>
<blockquote>
<p>Für kleine Codebeispiele wäre ich sehr dankbar</p>
</blockquote>
<p>Ditto <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>
<p>Also ich verwende - wie vermutlich viele andere hier auch - häufig TStringList, auch als Membervariable, die im Konstruktor erstellt<br />
und im Destruktor wieder gelöscht wird. Ich kann auch Deine gelegentlichen Probleme mit Clear() nicht nachvollziehen.</p>
<p>Das beste wäre es folglich, wenn Du mal zeigen würdest, was Du bisher so angestellt hast.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/662905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/662905</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Tue, 30 Nov 2004 15:43:27 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer von String Listen on Tue, 30 Nov 2004 18:36:52 GMT]]></title><description><![CDATA[<p>Zero01 schrieb:</p>
<blockquote>
<p>Wenn ich stringliste-&gt;Clear() weglasse läuft der Code wie ne 1. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Sieht so aus, als wuerde Dein Ereignis und das Clear 'gleichzeitig' auftreten koennen. wird Dein Ereignis in einem Thread ausgelöst? Dann koennte es an fehlender synchronisierung liegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/663097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/663097</guid><dc:creator><![CDATA[DerAltenburger]]></dc:creator><pubDate>Tue, 30 Nov 2004 18:36:52 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer von String Listen on Tue, 30 Nov 2004 20:37:24 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> Hast du dich schon mal ernsthaft mit C++ und StringListen beschäftigt??? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Sorry, aber Objekte gibt man mit delete wieder frei.</p>
<p>Oder hast du die StringList nicht so angelegt???<br />
TStringList *abc;</p>
<p>und irgendwo anders<br />
abc = new TStringList;</p>
<p>Mit abc-&gt;Clear() löschst du nur den Inhalt der Liste;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/663198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/663198</guid><dc:creator><![CDATA[Gast#649237 ;-)]]></dc:creator><pubDate>Tue, 30 Nov 2004 20:37:24 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer von String Listen on Tue, 30 Nov 2004 22:22:35 GMT]]></title><description><![CDATA[<p>@ Gast#649237 <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="😉"
    /> Danke für deine Tips, aber das weiß ich schon und habe alles so wie beschrieben angewendet.</p>
<p>Ich würde ja gerne mit <strong>delete</strong> die StringListe wieder freigeben aber das geht nur wenn ich sie Lokal in einer Funktion initialisiere, verwende und wieder freigebe. Die StringListe muss aber Funktionsübergreifend verfügbar sein weshalb ich die unsaubere weiße der globalen Deklaration gewählt habe. Hätte ich sie in die Klasse aufgenommen hätte ich ein Problem mehr gehabt.</p>
<p>Der Tip mit der synchronisation klingt plausibel aber ich verwende strigliste-&gt;Clear bevor ich die Funktion &quot;GetServerInfo(int)&quot; aufrufe.</p>
<p>Global: TStringList *player = new TStringList;</p>
<pre><code class="language-cpp">void __fastcall TForm1::ListView2SelectItem(TObject *Sender,
      TListItem *Item, bool Selected)
{
   GameBrowser var;                            //Klasse GameBrowser

   if (Item-&gt;Selected)
  {
   player-&gt;Clear();
   Form1-&gt;ListView1-&gt;Clear();
   var.GetServerInfo(Item-&gt;Index);
  }
}
</code></pre>
<pre><code class="language-cpp">void GameBrowser::GetServerInfo(int index)
{

    String ip = &quot;&quot;,iptemp = &quot;&quot;,porttemp = &quot;&quot;;
    GameBrowser var;

     ip = serverliste-&gt;Strings[index];

      for (int z = 1; z &lt;= ip.Length(); z++)
     {
          if (ip[z] != ':')
          {
           iptemp = iptemp + ip[z];
          }
           else
          {
            z++;
            for(int a = z;a &lt;= ip.Length();a++)
            {
              porttemp = porttemp + ip[a];
            }

              z = ip.Length();
          }
      }

     var.SendUDPData(iptemp,StrToInt(porttemp),2555,&quot;xff\\status\\&quot;);
}
</code></pre>
<pre><code class="language-cpp">void __fastcall TForm1::UDPStatus1DataReceived(TComponent *Sender,
      int NumberBytes, AnsiString FromIP, int Port)
{

    char buf[5000];
    int lenght,e;
    AnsiString data,temp = &quot;&quot;;
    bool value;
    GameBrowser var;

    Form1-&gt;UDPStatus1-&gt;ReadBuffer(buf,5000,lenght);

    data = AnsiString(buf);

     for (int r = 1;r &lt;= strlen(data.c_str()) ;r++)
  {

     if(data[r] != '\\')
    {

       temp = temp + data[r];     //Zusammensetzen jeder Zeile

    }

     else

    {
      if (temp != &quot;&quot;)
      {
        if(temp != &quot;queryid&quot;)
        {

           if(temp.AnsiPos(&quot;final&quot;) == 1)
           {
            value = true;

           }
            else
           {

             player-&gt;Add(temp.c_str());    //Hinzufügen zu Player String Liste
             temp = &quot;&quot;;

           }
        }
      }
    }
  }

          //-------------------------------------------------------

     if (value == true)   //Wenn die Liste fertig empfangen wurde
    {

        int rownumber = -1;

        for (e = 0; e &lt; player-&gt;Count; e++)    //Durch Stringliste iterieren
       {

          if(player-&gt;Strings[e].AnsiPos(&quot;deaths_&quot;) == 1)   //Neuen Spieler in Liste erkennen und ID berechnen
          {

            rownumber++;

            ListView1-&gt;Items-&gt;Add();

            ListView1-&gt;Items-&gt;Item[rownumber]-&gt;Caption = rownumber + 1;
            ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Add(&quot;&quot;);
            ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Add(&quot;&quot;);
            ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Add(&quot;&quot;);
            ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Add(&quot;&quot;);
            ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Add(&quot;&quot;);
            ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Add(&quot;&quot;);
            ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Add(&quot;&quot;);
          }

          if(player-&gt;Strings[e].AnsiPos(&quot;deaths_&quot;) == 1)
          ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Strings[3] = player-&gt;Strings[e + 1]; //Death

          if(player-&gt;Strings[e].AnsiPos(&quot;keyhash_&quot;) == 1)
          ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Strings[6] = player-&gt;Strings[e + 1]; //Hashkey

          if(player-&gt;Strings[e].AnsiPos(&quot;kills_&quot;) == 1)
          ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Strings[2] = player-&gt;Strings[e + 1];  //Kills

          if (player-&gt;Strings[e].AnsiPos(&quot;ping_&quot;) == 1)
          ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Strings[4] = player-&gt;Strings[e + 1]; //Ping

          if(player-&gt;Strings[e].AnsiPos(&quot;playername_&quot;) == 1)
          ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Strings[0] = player-&gt;Strings[e + 1];  //Name

           if(player-&gt;Strings[e].AnsiPos(&quot;score_&quot;) == 1)
           ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Strings[1] = player-&gt;Strings[e + 1]; //Score

           if (player-&gt;Strings[e].AnsiPos(&quot;team_&quot;) == 1)
           ListView1-&gt;Items-&gt;Item[rownumber]-&gt;SubItems-&gt;Strings[5] = player-&gt;Strings[e + 1]; //Team

       }

      //---------------------------

      value = false;

   }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/663247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/663247</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Tue, 30 Nov 2004 22:22:35 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer von String Listen on Wed, 01 Dec 2004 15:57:40 GMT]]></title><description><![CDATA[<p>Mir kommen da einige Dinge ungewöhnlich vor. Vielleicht kannst Du das mal näher erläutern.<br />
Irgendwie sieht es für mich so aus, als ob Du die Klasse GameBrowser nur als &quot;Zusammenfassung&quot; verschiedener Methoden verwendest.<br />
Normalerweise hätte ich erwartet, dass Du irgendwo mit new eine Instanz von GameBrowser erstellst und am Ende wieder freigibst.<br />
Dein Formular TForm1 könnte beispielsweise eine Instanz dieser Klasse halten. Ich kann anhand Deines Codes nicht erkennen, dass<br />
GameBrowser irgendeinen Zustand speichert. Am naheliegendsten wäre es doch wohl die Stringliste von GameBrowser verwalten zu lassen,<br />
d.h. GameBrowser hat eine Member-Variable vom Typ TStringList, die auch von GameBrowser geleert und gefüllt, also allein verwaltet<br />
wird. Vielleicht mal ein paar Code-Beispiele.</p>
<pre><code class="language-cpp">// header (.h)
class GameBrowser
{
public:
  GameBrowser();
  ~GameBrowser();
  void Clear();
  int Add(AnsiString str);
  void GetServerInfo(int index);
  void SendUDPData(AnsiString ip, int port, int wasWeissIch, AnsiString irgendwas);
private:
  TStringList* FPlayer;
  TStringList* serverliste;  // geraten
};

// Implementierung (.cpp)
GameBrowser::GameBrowser()
{
  FPlayer = new TStringList();
  serverliste = new TStringList();
}

GameBrowser::~GameBrowser()
{
  delete FPlayer;
  delete serverliste;
}

void GameBrowser::Clear()
{
  FPlayer-&gt;Clear();
}

int GameBrowser::Add(AnsiString str)
{
  return FPlayer-&gt;Add(str);
}

void GameBrowser::GetServerInfo(int index)
{
  // Sowas ähnliches wie in Deinem Code-Auszug
}

void GameBrowser::SendUDPData(AnsiString ip, int port, int wasWeissIch, AnsiString irgendwas)
{
  // weiter mir unbekannte Aktionen...
}
</code></pre>
<p>Ich kann allerdings nicht behaupten, dass ich Deinen Code verstehen würde.</p>
<p>Ein paar Dinge sind mir noch aufgefallen, die Fehler verursachen könnten:</p>
<p>- StrToInt() sollte in einen try/catch-Block, falls mal keine Zahlen drin stehen</p>
<p>- in der Methode ListView2SelectItem() der Aufruf</p>
<pre><code class="language-cpp">Form1-&gt;ListView1-&gt;Clear();
</code></pre>
<p>Hier ist Form1 nicht nur unnötig, sondern kann auch mal ganz schnell zu einem Fehler führen. Wenn Du Dich irgendwann mal entschließen<br />
solltest, mehrere Instanzen von TForm1 zu erstellen, löschst Du damit nicht ListView1 der aktuellen Instanz sondern immer ListView1<br />
von Form1.</p>
<p>- TStringList::Add() erwartet als Argument einen AnsiString. Wenn Du eine Variable vom Typ AnsiString hast, ist unnötig auf diese<br />
nochmal c_str() aufzurufen (s. UDPStatus1DataReceived()).</p>
<p>- Warum Du in GetServerInfo() eine lokale Variable vom Typ GameBrowser brauchst, ist mir rätselhaft. Um die Methode SendUDPData()<br />
aufzurufen, sollte ein stinknormaler Aufruf ausreichen.</p>
<p>Mir scheint es, als ob Du den Grundgedanken der Objektorientierung noch nicht richtig erfasst hast. Überlege Dir doch mal, in welche<br />
Objekte Du Dein Problem sinnvollerweise aufteilen könntest und male Dir mal ein Klassengerüst auf. Oft lösen sich die Probleme von<br />
selbst, wenn klar ist, welche Klasse wofür zuständig ist.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/663712</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/663712</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Wed, 01 Dec 2004 15:57:40 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer von String Listen on Fri, 03 Dec 2004 08:34:05 GMT]]></title><description><![CDATA[<p>Danke Alexander ! ich werde mir mal am Wochenende Schritt für Schritt deine Anmerkungen durcharbeiten.</p>
<p>Vielen Dank für deine Mühe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /><br />
Das Ergebnis werde ich dann posten</p>
]]></description><link>https://www.c-plusplus.net/forum/post/664942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/664942</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Fri, 03 Dec 2004 08:34:05 GMT</pubDate></item><item><title><![CDATA[Reply to Lebensdauer von String Listen on Fri, 10 Dec 2004 12:09:09 GMT]]></title><description><![CDATA[<p>Ok, habe alle Funktionen und die Klasse so überarbeitet wie es deinem Sollzustand entspricht.</p>
<p>Habe den Fehler gefunden ! Warum sagt mir niemand das UDP Packete in zufälliger Reihenfolge gesendet werden <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/670256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/670256</guid><dc:creator><![CDATA[Zero01]]></dc:creator><pubDate>Fri, 10 Dec 2004 12:09:09 GMT</pubDate></item></channel></rss>