Blöde Fehlermeldug
-
Hallo Leute,
eben bin ich am verzeifeln.
Mein Programm soll nach Eingabe einer Postleitzahl, alle Zahlen aus einer Kette ausgeben, die größer sind als die Eingabe. Dies funktioniert wunderbar. Nur stürzt mein Programm am Ende ab und ich kann einfach keinen Fehler finden.Bitte helft mir
Folgende Komponenten habe ich verwendet:
1x Editfeld: edtplz
1x Button: btngo
1x Memofeld: memoout//Prototyp int *plz_check (int); //--------------------------------------------------------------------------- __fastcall Tfmrmain::Tfmrmain(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall Tfmrmain::btngoClick(TObject *Sender) { //Variable int plz_such; int *plz_gefunden; int i; plz_such = edtplz->Text.ToInt(); plz_gefunden = plz_check (plz_such); memoout->Lines->Clear(); for (i=1;i<=plz_gefunden[0];i++) { memoout->Lines->Add (plz_gefunden[i]); } } //----------------------------------- int *plz_check (int plz_such) { int *pl; int plz[6] = {5,56780, 34876, 91002, 80458, 19387}; int i; int z=0; for (i=1;i<=plz[0];i++) { if (plz[i]>plz_such) { z++; pl[z] = plz[i]; } } pl[0]=z; return pl; }
-
Athome schrieb:
//----------------------------------- int *plz_check (int plz_such) { int *pl; int plz[6] = {5,56780, 34876, 91002, 80458, 19387}; ... pl[z] = plz[i]; ... return pl; }Erst einmal ist "pl" kein Array, sondern nur ein Zeiger auf einen einzelnen Integer-Wert. Weiterhin ist die Lebensdauer des Arrays "plz" auf die Funktion "plz_check" begrenzt. Du darfst also auch keinen Zeiger auf diesen Bereich aus der Funktion herausreichen und weiterverwenden.
Wirf mal einen Blick in ein C/C++-Buch - Stichworte: Lebensdauer, Scope, Gültigkeitsbereich.
-
Danke für Deine schnelle Antwort. Pl ist doch ein Array, da es die Postleitzahlen und die Anzahl der gefundenen PLZ`s enthält, oder ??? Wie sollte ich es programmieren????
-
Athome schrieb:
Pl ist doch ein Array
Wie ich schon sagte, ist pL nur ein Zeiger auf ein Integer. Wenn Du ein Array verwenden willst, mußt Du auch Speicherplatz dafür anfordern. Aber das ist ein anderes Thema und gehört daher in einen anderen Thread (und vermutlich auch in ein anderes Forum).
Auch hier könnte ein C++-Buch weiterhelfen