Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.17.186.135] |
|
Сообщ.
#1
,
|
|
|
Hi!
В процедуре для вычисления FFT procedure MakeFFT; {Процедура самого преобразования} var fftb: TFFTBase; //класс, который реализует БПФ fFFTComplBuf: ^TComplexArray; //Буфер для хранения комплексных величин i: integer; begin GetMem(fFFTComplBuf, BufSize*SizeOf(TComplex)); //Выделение памяти под массив for i:=0 to BufSize-1 do //Заполняем данными массив begin fFFTComplBuf[i].Re := fDataBuf[i]; fFFTComplBuf[i].Im := 0; end; fftb:=TFFTBase.Create(nil); В цикле заполнения массива выскакивает ошибка range check error при i>0 Если в свойствах компилятора (D7) снять галку "Range checking", то никаких ошибок не возникает. Это глюк компилятора? |
Сообщ.
#2
,
|
|
|
TComplexArray объявлен как массив
TComplexArray = array[0..0] of TComplex; поэтому RangeCheck справедливо возмущается Но ничего не мешает объявить его как TComplexArray = array[word] of TComplex; или TComplexArray = array[0.. MaxInt div SizeOf(TComplex)] of TComplex; Или использовать динамические массивы с SetLength (но тут нужно следить, не используется ли где-то указатель на массив) TComplexArray = array of TComplex; |