delphi - 有趣的堆栈溢出!编译器错误?

标签 delphi delphi-2009

我想知道我是否发现了编译器错误?我从我的应用程序中删除了一些旧代码,现在我在“开始”处得到了 stackoverflow(请参阅下面的代码和反汇编)。

procedure TfraNewRTMDisplay.ShowMeasurement;
var
  iDummy, iDummy2, iDummy3:integer;
begin    // STACK OVERFLOW BEFORE MY CODE STARTS
  iDummy:=0;
  iDummy2:=0;

  case iDummy2 of
    1:
      case iDummy of
        1:m_SelectedRTMMenuData.ChannelMeasSet.MeasKV.ClearMeasurementData;
        2:m_SelectedRTMMenuData.ChannelMeasSet.MeasKV.ClearMeasurementData;
      end;
  end;  
end;

NewRTMDisplay.pas.1601: begin
00983BF8 55               push ebp
00983BF9 8BEC             mov ebp,esp
00983BFB B9D4E40400       mov ecx,$0004e4d4
00983C00 6A00             push $00             // stack overflow loop
00983C02 6A00             push $00             // stack overflow loop 
00983C04 49               dec ecx              // stack overflow loop  
00983C05 75F9             jnz $00983c00        // stack overflow loop
00983C07 56               push esi
00983C08 57               push edi
00983C09 8945FC           mov [ebp-$04],eax
00983C0C 8D856005FFFF     lea eax,[ebp-$0000faa0]
00983C12 8B153C789A00     mov edx,[$009a783c]
00983C18 E88B35A8FF       call @InitializeRecord
00983C1D 8D85D00AFEFF     lea eax,[ebp-$0001f530]
00983C23 8B153C789A00     mov edx,[$009a783c]
00983C29 E87A35A8FF       call @InitializeRecord
00983C2E 33C0             xor eax,eax
00983C30 55               push ebp
00983C31 68F73C9800       push $00983cf7
00983C36 64FF30           push dword ptr fs:[eax]
00983C39 648920           mov fs:[eax],esp
NewRTMDisplay.pas.1602: iDummy:=0;
00983C3C 33C0             xor eax,eax
00983C3E 8945F8           mov [ebp-$08],eax
NewRTMDisplay.pas.1603: iDummy2:=0;
00983C41 33C0             xor eax,eax
00983C43 8945F4           mov [ebp-$0c],eax
NewRTMDisplay.pas.1605: case iDummy2 of
00983C46 8B45F4           mov eax,[ebp-$0c]
00983C49 48               dec eax
00983C4A 7571             jnz $00983cbd
NewRTMDisplay.pas.1607: case iDummy of
00983C4C 8B45F8           mov eax,[ebp-$08]
00983C4F 48               dec eax
00983C50 7405             jz $00983c57
00983C52 48               dec eax
00983C53 7436             jz $00983c8b
00983C55 EB66             jmp $00983cbd
NewRTMDisplay.pas.1608: 1:m_SelectedRTMMenuData.ChannelMeasSet.MeasKV.ClearMeasurementData;
00983C57 8D951872EBFF     lea edx,[ebp-$00148de8]
00983C5D 8B45FC           mov eax,[ebp-$04]
00983C60 8B80F0020000     mov eax,[eax+$000002f0]
00983C66 E895DBE9FF       call TRTMMenuData.ChannelMeasSet
00983C6B 8DB52072EBFF     lea esi,[ebp-$00148de0]
00983C71 8DBD6005FFFF     lea edi,[ebp-$0000faa0]
00983C77 B9A43E0000       mov ecx,$00003ea4
00983C7C F3A5             rep movsd 
00983C7E 8D856005FFFF     lea eax,[ebp-$0000faa0]
00983C84 E81B3F0200       call TDeviceMeas.ClearMeasurementData
00983C89 EB32             jmp $00983cbd
NewRTMDisplay.pas.1609: 2:m_SelectedRTMMenuData.ChannelMeasSet.MeasKV.ClearMeasurementData;
00983C8B 8D9560D9D8FF     lea edx,[ebp-$002726a0]
00983C91 8B45FC           mov eax,[ebp-$04]
00983C94 8B80F0020000     mov eax,[eax+$000002f0]
00983C9A E861DBE9FF       call TRTMMenuData.ChannelMeasSet
00983C9F 8DB568D9D8FF     lea esi,[ebp-$00272698]
00983CA5 8DBDD00AFEFF     lea edi,[ebp-$0001f530]
00983CAB B9A43E0000       mov ecx,$00003ea4
00983CB0 F3A5             rep movsd 
00983CB2 8D85D00AFEFF     lea eax,[ebp-$0001f530]
00983CB8 E8E73E0200       call TDeviceMeas.ClearMeasurementData
NewRTMDisplay.pas.1612: end;

有什么想法吗?

谢谢! 议员

最佳答案

正在创建一个 320 KB 的缓冲区。该调用链中是否有任何对象内部有静态分配的巨大数组?也许它正在尝试将返回的对象之一放入堆栈中。

关于delphi - 有趣的堆栈溢出!编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/387438/

相关文章:

delphi - 如何将 Ctrl+R 设置为 Delphi 中 "Rename"重构的快捷方式?

delphi - 编译delphi-pi

delphi - 在 Delphi 2009 中检测 TWebBrowser 刷新事件

delphi - 在表单中实时绑定(bind)现有的用户对象

delphi - 将文件包含在ridl中

c# - 从delphi读取二进制文件

delphi - 从专门的泛型类型派生

delphi - 文件的十六进制 View

德尔福2009?好的还是有问题?

delphi - 当 dcu 存在时,Delphi 在编译时是否需要 dfm?