| Autor |
Beitrag |
CarpeDiem
      
Beiträge: 128
WIN XP
Borland C++ 2002, CodeGear C++ 2007, C# (VS 2008)
|
Verfasst: Sa 15.03.08 17:39
Hallo,
ich habe zwar schon viele Berichte gelesen, aber nichts passendes
gefunden. Ich habe ein Array, dessen Länge ich während der Laufzeit
anpassen möchte.
Bei dem Quellcode:
Quelltext 1: 2:
| int *arr = new int[10]; SetLength(arr, 20); |
oder:
Quelltext 1: 2:
| int arr2[10]; SetLength(arr2, 20); |
bekomme ich immer den Fehler "Aufruf der undefinierten Funktion 'SetLength'"
Stefan
Moderiert von Christian S.: Topic aus Dateizugriff verschoben am Sa 15.03.2008 um 19:57
Moderiert von Christian S.: Code-Tags hinzugefügt
|
|
Calculon
      
Beiträge: 676
Win XP Professional
Delphi 7 PE, Delphi 3 PRO
|
Verfasst: So 16.03.08 03:11
Hehe, jetzt wär's gut zu wissen in welcher Sprache du programmierst:
C:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| int *arr; int laenge;
laenge = arr = (int*) calloc (laenge, sizeof(int)); if arr == NULL { }
free arr; |
C++
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| int *arr; int laenge;
laenge = arr = new int[laenge];
if arr == NULL { }
delete[] arr; |
Delphi:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| var arr: array of integer; laenge: integer; begin laenge := setlength(arr, laenge); |
[OT] Wie gibt man eigentlich den Speicher von dynamischen arrays in Delphi frei? Ich mach des immer mit setlength(arr, 0); [/OT]
Kann aber auch C# sein. AFAIK ist doch die C#-Syntax eine Schnittmenge aus Delphi u. C++ und das
C#-Quelltext 1: 2:
| int *arr = new int[10]; SetLength(arr, 20); |
sieht mir ziemlich nach 'nem Mix aus beiden aus...
Gruß
Calculon
--
_________________ Hallo Mutti
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: So 16.03.08 03:15
jop, mit setlength(arr,0) gibt man den speicher frei (zumindestens bei D7)
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
CarpeDiem 
      
Beiträge: 128
WIN XP
Borland C++ 2002, CodeGear C++ 2007, C# (VS 2008)
|
Verfasst: So 16.03.08 06:42
Danke,
hoffte, daß SetLength() auch unter C++ funktioniert, an das
dynamische anlegen eines Feldes habe ich gar nicht gedacht.
Vielen Dank.
|
|
CarpeDiem 
      
Beiträge: 128
WIN XP
Borland C++ 2002, CodeGear C++ 2007, C# (VS 2008)
|
Verfasst: Mo 17.03.08 05:24
Gibt es auch eine Möglichkeit die Größe des Feldes während der Laufzeit
zu ändern, ohne daß die schon im Feld gespeicherten Daten verlorengehen?
|
|
JüTho
      
Beiträge: 2021
Erhaltene Danke: 6
Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
|
Verfasst: Mo 17.03.08 10:05
Bitte entschuldige diese Nachfrage:
Calculon hat folgendes geschrieben: | | Hehe, jetzt wär's gut zu wissen in welcher Sprache du programmierst: |
Durch Deine Signatur ist ja klar, dass es um C++ geht; also kann ich nicht antworten. Jürgen
|
|
Th69
      

Beiträge: 4809
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Mo 17.03.08 10:47
In C++ verwendet man für dynamische Arrays die Klasse std::vector<>:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| #include <vector>
std::vector<int> v;
for(int i=0; i<10; i++) v.push_back(i);
v.resize(20); // vector wird mit default (0) aufgefüllt v.clear(); // vector wird geleert |
Um Freigabe brauchst du dich dann nicht zu kümmern, da der vector sich automatisch selber zerstört, wenn er aus dem Scope geht... nur bei Zeigern müsstest du dich selber darum kümmern, aber dafür gibt es dann auch noch die sogenannten "Shared Pointer", z.B. boost::shared_ptr ([url] www.boost.org[/url]).
Eine sehr gute Referenz-Seite für die C++ Standard Klassen ist [url] www.cppreference.com[/url]
Edit: [cpp]-Tag wird nicht unterstützt -(
|
|
CarpeDiem 
      
Beiträge: 128
WIN XP
Borland C++ 2002, CodeGear C++ 2007, C# (VS 2008)
|
Verfasst: Mo 17.03.08 12:52
Danke, das probier ich mal aus.
|
|