La Cause de l'Erreur de Vérification de Plage (Delphi)

Voici une version condensée d'un code qui provoque à la fois une erreur de vérification de Plage et une erreur de dépassement de capacité, devrais-je tourner sur ceux compilateur de vérifier les directives. Je comprends pourquoi ce serait provoquer un dépassement de capacité, sur la multiplication de la C1, il semble probable qu'il pourrait dépasser les données de type max valude. Mais pourquoi en serait-il également déclencher une erreur de vérification? Delphi documentation et les autres postes sur un débordement de pile à les faire sonner comme de la gamme, à vérifier les erreurs sont généralement pour des accès à des tableaux qui sont en dehors des limites. Mais je ne suis pas accès à un tableau sur la ligne il est dit, est à l'origine de la gamme-erreur de vérification. Peut-être son sur la cession à param1? Mais pourquoi serait-ce une gamme de vérifier et pas une erreur de dépassement de capacité, le cas échéant?

const
  C1 = 44001;
  C2 = 17999;

function fxnName(..other params...; param1: Word): String;
var
  someByte: byte;
begin
  // some code
  // by now we're in a loop. the following line is where it breaks to in the debugger: 
  param1 := (someByte + param1) * C1 + C2;
  // more code
end;

Si c'est pertinent, lorsqu'elle tombe sur cette ligne dans le débogueur, toutes les valeurs de regarder comme prévu, sauf param1, ce qui montre "identificateur non déclaré: 'param1'" quand je demande à Delphes pour l'évaluer.

J'avais suppose que c'est juste parce que la gamme se produit avant le débordement de la case, et une fois la vérification de plage exception est levée, le débordement de la vérification ne se produit jamais. (Pas sûr de l'ordre, c'est donc juste un soupçon.)

OriginalL'auteur Jessica Brown | 2012-07-25