【发布时间】:2014-03-27 19:52:39
【问题描述】:
我有一个调用多个函数的过程:
procedure TForm1.Button1Click(Sender: TObject);
var
rawData: TRawData;
rawInts: TRawInts;
processedData: TProcessedData;
begin
rawData := getRawData();
rawInts := getRawInts(rawData);
processedData := getProcessedData(rawInts);
end;
数据类型定义如下:
TRawData = array[0..131069] of Byte;
TRawInts = array[0..65534] of LongInt;
TProcessedData = array[0..65534] of Double;
运行程序只需:
rawData := getRawData();
rawInts := getRawInts(rawData);
工作得很好。但是,当我尝试运行时:
getProcessedData(rawInts)
我收到堆栈溢出错误。我不明白这是为什么。 getProcessedData的函数代码很简单:
function getProcessedData(rawInts : TRawInts) : TProcessedData;
var
i: Integer;
tempData: TProcessedData;
scaleFactor: Double;
begin
scaleFactor := 0.01;
for i := 0 to 65534 do
tempData[i] := rawInts[i] * scaleFactor;
Result := tempData;
end;
为什么会导致错误?
【问题讨论】:
-
当从 getProcessedData 函数中取出代码并将其手动放入过程中时,仍然会出现此错误。除此之外,输入getRawData时似乎会抛出错误......我不知道这是为什么。
-
局部变量在栈上分配,推测
array[0..65534] of double;太大,导致栈溢出。 -
好的,我会缩短数组,看看是否可行。
-
你是对的。这确实有点问题,因为我真的需要双打数组那么长。我可以以某种方式延长堆栈的长度吗? (这可能是一个非常愚蠢的问题..)
-
我可以使用全局变量来节省堆栈空间,因为我没有在函数内部创建大型数据集吗?
标签: delphi stack-overflow