Array wird nicht gefüllt??? Fehler gefunden aber noch keine Lösung



  • Hallo,
    bei mir wird in array der erste eintrag gefüllt und danach nicht mehr:

    int anzahl = SQLQuery1->RecordCount;
    
    	stvar = new String[anzahl];
    
    	for (i=0; i<anzahl ; i++) {
    	 tan = SQLQuery1->FieldByName("pname")->AsString;
    	 id_var2 = SQLQuery1->FieldByName("pid")->AsString;
    	 Synchronize(&Aname);
    	 SQLQuery1->Next();
    	}
    ... 
    ...
    ...
    
    void __fastcall TMyThread::Aname()
    {
    	Form1->CheckListBox1->Items->Add(tan);
    	stvar[i] = id_var2;
    }
    

    Die schleife läuft keine Fehlermeldung aber nur einen eintrag drin.

    //=============================================
    Fehler gefunden:
    die Array grösse wird nicht übernommen

    stvar = new String[anzahl];
    in header int anzahl; String* stvar;
    


  • Hat du auch ne konkrete Frage dazu oder wolltest du uns nur deinen Programmierstil zeigen?
    Hat es einen bestimmten Grund, dass du stvar in AName() befüllst?
    Ist i überhaupt im ganzen TMyThread bekannt oder nur in der Funktion wo die schleife abläuft? Im ersten Fall, ist das ziemlich ungeschickt, weil man eine Variable "i" schnell mal überschreibt. Andernfalls kanns nicht funktionieren.



  • Hi,
    vielleicht habe ich mich wohl falsch ausgedrückt.
    Alle variable wie i usw.. sind bekannt - habe die alle in header definiert und es funktioniert soweit.
    Das Problem ist das ich die Grösse der Array wie hier

    int anzahl = SQLQuery1->RecordCount;
    stvar = new String[anzahl];
    

    festlegen wollte aber das funktioniert nicht.
    Im header steht

    String* stvar;
    

    und in cpp siehst ja oben.
    Aber wenn ich im header selber

    String stvar[1000];
    

    festlege klappt es.
    Habe das aus dem Netz.



  • Hast du inzwischen eine konkrete Frage?

    titanium schrieb:

    ...aber das funktioniert nicht.

    Tolle Fehlerbeschreibung. Was genau funktioniert daran nicht?



  • titanium schrieb:

    Hi,
    ...Das Problem ist das ich die Grösse der Array wie hier

    int anzahl = SQLQuery1->RecordCount;
    stvar = new String[anzahl];
    

    festlegen wollte aber das funktioniert nicht.
    ..
    Habe das aus dem Netz.

    WAS funktioniert nicht? Gibts ne Exception?

    Ausserdem ist das sehr schlechter Programmierstil, auf eine globale Variable (i) von zwei verschiedenen threads aus zuzugreifen ohne Critical Sections.
    Das zeigt mir sehr eindrucksvoll, dass man auch Sachen aus dem Netz nicht einfach so ohne Nachdenken übernehmen sollte.



  • ehhh i aus zwei threads, wie kommst du da drauf ?
    egal.
    Noch einmal:

    stvar = new String[anzahl];
    

    das funktioniert nicht.
    Ich kann die Array grösse nicht festlegen, das macht er nicht obwohl die anzahl=75 oder 100 oder 1000 ist.
    Die Frage ist warum macht er das nicht ?
    Es gibt keine Fehlermeldung, es kommt auch zu kein Problem mit variablen usw.. nur die Array grösse kann ich nicht festlegen.

    DAnke.



  • Bist du dir sicher, dass anzahl die richtige Grösse hat? Hast du das im Debugger überprüft? Woher weißt du, dass das Array nicht die richtige Größe hat?
    Evtl. stimmt nur was bei der Zuweisung nicht.



  • Hi,
    überprüft habe ich das.
    Bin die Zeilen alle Durch gegangen.
    Habe überall Haltepunkte festgelegt werte anzeigen lassen, deswegen sage ich ja das er das nicht übernimmt.
    Anzahl ist 75 oder 100 usw...
    Aber die stvar gösse ändert sich nicht.
    Liegt das vielleicht daran das ich in header String* stvar; definiere und in cpp stvar = new String[anzahl]; ?



  • Wie erkennst du denn ob sich die Größe von stvar ändert? Der Debugger zeigt das schließlich nicht an.



  • Hi,

    dein Code sollte vom Prinzip laufen. Habe mal ein Schnipsel mit deinen
    Startwerten aufgesetzt. Kannst ja mal vergleichen.

    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    	int cnt = 50;
    	String id_var2 = "test";
    	String *stvar;
    	stvar = new String[cnt];
    
    	for (int i = 0; i< cnt ; i++) {
    		stvar[i] = id_var2 + IntToStr(i);
    		Memo1->Lines->Add(stvar[i]);
    	}
    }
    //---------------------------------------------------------------------------
    

    Vielleicht hilfts dir.

    mfg
    kpeter



  • LoL
    die beiträge haben sich geschnitten ???
    //=========================================

    kpeter ja habe das eingebaut Memo geht bis test49
    array ist bei test0.



  • Hast du mein Posting gelesen? Vermutlich ist woanders dein Problem



  • Das besagt nichts. Der Debugger weiß überhaupt nicht wie groß das Array ist wenn du es dynamisch erzeugst. Ich denke mal dein Fehler steckt woanders.



  • LoL
    die beiträge haben sich geschnitten.
    //=========================================

    kpeter ja habe das eingebaut Memo geht bis test49
    array ist bei test0.


Anmelden zum Antworten