Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Dynamiska Arrays och String

Postades av 2003-11-24 10:04:49 - Jonas Eriksson, i forum delphi, Tråden har 2 Kommentarer och lästs av 1508 personer

Det här kanske är baskunskap för en van Delphihacker, men för mig som är van vid VB's omhändertagande debugger har det blivit en irriterade sak.

Om jag skapar en dynamisk array med strängvariabler (i en record) måste jag deklarera dem med angivet antal tecken. String; ger nämligen märkliga programfel medan String[255]; fungerar bra. Jag förstår varför, men vet inte hur jag ska gå vidare när jag vill kunna använda längre strängar som måste vara dynamiska i längd för att inte stjäla alltför mycket minnesutrymme. AnsiString? Kan jag använda dynamiska AnsiSträngar i en dynamisk array eller måste jag ange antalet tecken för dem också?

Kan debuggern ställas in så att den tar hand om dessa saker?

Funkar det annorlunda i senare versioner? Jag kör för närvarande Delphi 5.


Svara

Sv: Dynamiska Arrays och String

Postades av 2003-11-24 12:47:59 - Sven Åke Persson

Fråga:
Hur skapar jag dynamiska vektorer, där vektorns storlek inte är förbestämt när programmet kompileras?

Svar:
Börja med att bestämma den maximala storleken, lämpligt kan vara att välja prick 64 kB (FFFFh)
då det är det största minnet som kan allokeras med GetMem. I detta exempel ska vektorn innehålla variabler av Integer-typ.


const
MaxIntArraySize = $FFFF div SizeOf(Integer);

Definiera sedan några typer;


type
PIntArray = ^TIntArray
TIntArray = array [0..MaxIntArraySize] of Integer;

Deklarera därefter en variabel av typen PIntArray och använd GetMem
för att allokera just det antal bytes som du behöver;

GetMem(Numbers, Count * SizeOf(Integer));
try
Numbers^[0] := 3655;
Numbers^[1] := 9873;
Numbers^[2] := 76;
...
...
finally
FreeMem(Numbers, Count * SizeOf(Integer));
end;

FreeMem lämnar tillbaka det allokerade minnet. Undantagshanteringen ser till att det alltid blir återlämnat. Använd gärna MaxAvail för att ta reda på om det finns tillräckligt mycket minne ledigt först.

Om du behöver allokera mer minne än 64 kB kan du använda dig av GlobalAlloc/GlobalLock och GlobalFree/GlobalUnlock i stället för GetMem och FreeMem.

Kolla även Help sök på Dynamic Array


Svara

Sv: Dynamiska Arrays och String

Postades av 2003-11-25 09:24:06 - Jonas Eriksson

Hej, tack för ditt utförliga svar!

Men...

För det första: jag använder SetLength för att skapa en dynamisk array, vilket har fungerat utmärkt (hittills). Är det fel?

För det andra: det är när jag har poster som innehåller strängar med odefinierad storlek som problemen uppstår. Jag kan förstå att de skriver över sig själva då jag modifierar strängarnas längd, men hur göra för att inte råka ut för det? Måste man köra GetMem för varje individuell post? Vid varje förändring av dess innehåll.

Hmm...


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 159
27 952
271 704
956
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies