immer selbe Adresse bei new



  • Ich habe folgendes Problem:

    Ich rufe von einer Klasse eine Methode einer anderen Klasse auf, welche folgendeZeilen enthält:

    TDataPoint *dataPoint;
       dataPoint = new TDataPoint(dPointIndex, name, index, sIdent, isSource);
    

    Mein Problem dabei ist, dass mir new immer wieder die selbe Adresse zurück-
    liefert. Trage ich allerdings die new-Zeile doppelt in die Methode ein erhalte ich unterschiedliche Adressen.

    Wäre für Tips sehr dankbar.



  • Du gibst doch vor einem neuen new 'dataPoint' mit delete wieder frei, oder ? Was spricht dann dagegen, daß new den selben Speicherbereich wieder verwendet ?



  • Da ich die TDataPoint-Objekte in dieser Methode in eine TList packen möchte kann ich sie nicht löschen. Weil ich aber immer die selbe Adresse zurück
    bekomme, überschreibt mir Add() immer wieder den gleichen Datensatz.



  • Ich habe die Vermutung, daß irgendwas an Deinem Code nicht stimmt, bzw. sich ein Denkfehler eingeschlichen hat. Zeig doch bitte mal den Code, indem Du die TList bestückst inkl. dem new-Gedöns 😉



  • Methode zum Füllen der TList:
    availableDatapoints ist meine TList, welche ich mit DataPoint's füllen möchte.

    void __fastcall TFormSelChannel::AddDataPoint(AnsiString name, int index, AnsiString sIdent, bool isSource)
    {
      TDataPoint *dataPoint;
      dataPoint = new TDataPoint(dPointIndex, name, index, sIdent, isSource);
      availableDatapoints->Add(dataPoint); 
    
      // nur fuer Testzwecke zum Auslesen
      dataPoint = availableDatapoints->GetItem(dPointIndex);
    
      dPointIndex++;
    }
    
    void __fastcall TPMFSServer::BuildChannelList()
    {
     for(int index = 0; index < availableDatapoints->Count; index++)
     {
      TDataPoint *dPoint;
    
      // Auslesen der DataPoint's je nach index. Liefert immer den selben DataPoint
      dPoint = availableDatapoints->Item(index);
    
     ...
    
     }
    }
    


  • 🙄 sieht alles auf den ersten Blick ganz korrekt aus 🙄
    Ich seh grad, Du benutzt hier 2 unterschiedliche Klassen, vielleicht hängts ja damit irgendiwe zusammen ?! Hab momentan leider keine Zeit mich näher damit zu befassen 😞



  • 😕 Ich kenne bei TList keine Funktion GetItem() oder Item() 😕

    Hast du die List-Klasse selbst geschrieben? Vielleicht liegt's daran?



  • Ich habe den Fehler gefunden. Hatte irrtümlich in einer anderen Methode den aktuellen TDataPoint gelöscht. Dadurch zeigte new beim Anlegen von neuen Objekten immer wieder auf die selbe Adresse.

    Die Methoden Item und GetItem sind aus einer Template-Klasse, die ich verwende. Den Quellcode dazu habe ich von folgender Seite (unter BC++ Builder/dynamische Arrays): [url] http://www.fatman98.de.vu [/url]

    Vielen Dank an Alle die sich deswegen den Kopf zerbrochen haben. 🙂

    [ Dieser Beitrag wurde am 25.06.2003 um 14:48 Uhr von Karlo editiert. ]



  • Na dann ist ja alles Ok.
    Wenn ein Programm auf Anhieb läuft, hat man sowieso was falsch gemacht :D:D:D


Anmelden zum Antworten