AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

GetMem verursacht Fehler

Ein Thema von JanW · begonnen am 24. Jun 2009 · letzter Beitrag vom 27. Jun 2009
 
JanW

Registriert seit: 5. Jun 2009
8 Beiträge
 
Lazarus
 
#1

GetMem verursacht Fehler

  Alt 24. Jun 2009, 06:37
Da war ich jetzt so stolz auf mich, hab es geschafft dass in OpenAL ein Wavesound abspielt, alles eigens programmiert ohne große Delphierfahrung und jetzt sowas...
GetMem verursacht eine SIGSEGV die ich mir nicht erklären kann.

Das Programm funktioniert folgendermaßen:

Ich habe eine Klasse, die WAVE-Klasse, die liesst mit einem TFileStream den WAVE-Header.
Danach wird, je nach BitRate (8, 16, 24 (> 32)) ein dynamisches Array mit 16 Einträgen erstellt (nennen wir das mal Datenblock). Aus der Datei werden die 16 Einträge in den Datenblock gelesen, und mit Move in ein dyn. Array kopiert. (Für den fall von einer BitRate von 16bits, wie es üblich ist ist es als ein Array of SmallInt mit xxxxxxx Elementen. Also sehr viele. Normalerweise 2-3Millionen).
Dann geb ich den Speicher des Datenblocksfrei (setlength(DataBlock16,0)).

So und wenn ich danach, ganz unabhängig davon, in einer anderen Klasse (TForm1) mit GetMem speicher allozieren will, gibts einen Fehler.
Bis zu 500bytes kann ich mit GetMem holen, danach schlägt es fehl. Kein EOutOfMemory ( ReturnNilIfGrowHeapFails hab ich auf True gesetzt ), kein gar nichts. Ich mach auch nicht mehr.

Delphi-Quellcode:
procedure TForm1.Button6Click(Sender: TObject);
var
 c: ^byte;
begin
  getmem(c, 555); //<- Da tritt der Fehler auf
  freemem(c);
end;
SIGSEGV. Egal was.
Wenn ich den GetMem VOR dem Laden der WaveDatei benutze geht es.
Es kann nichts mit der Größe der WAVEDatei zu tun haben. Während getMem bei fast allen meiner WAVEs fehlschlägt (zB bei meiner 30mb Wave) funktioniert es wiederum mit einer 50mb Wave. OutOfMemory ist also fast ausgeschlossen.
Ich bin komplett ratlos was das angeht. Ich muss diese Lowlevel Funktionen benutzen damits schnell geht im Programm.. Den Speicher davor zu beanschlagen ist keine Option, das muss danach geschehen.


Hat jemand von euch ne Ahnung was das betrifft, oder ähnliche Erfahrung?
Liegs an mir oder am FPC?
Im Internet hab ich einige Bugbeschreibungen gefunden mit ähnlichem Problem, allerdings immer ohne Antworten oder Lösungsvorschläge...

Gruß,
Jan
Jan
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz