gpt4 book ai didi

compiler-errors - 艾达 : index check failed

转载 作者:行者123 更新时间:2023-12-02 10:40:37 25 4
gpt4 key购买 nike

尝试运行我的程序时,出现错误:引发 CONSTRAINT_ERROR:tp3.adb:41 索引检查失败
有问题的行是:IF CaveF5.Infos(H).Nom = Nom_Bout (洞穴有问题?)
谢谢你的帮助 !
这是代码:

--But : Gestion d'une cave à vin

TYPE CouleurVin IS (Rose, Rouge, Blanc);
PACKAGE CouleurIO IS NEW Enumeration_io(CouleurVin);
USE CouleurIO;


TYPE Bouteille IS RECORD
Nom : Unbounded_String;
Couleur : CouleurVin;
Millesime : Integer;
Quantite : Integer;
END RECORD;


N: CONSTANT Integer := 1000;
TYPE Cave IS ARRAY (1..N) OF Bouteille;


TYPE Cave_Bis IS RECORD
Infos : Cave;
Nbeff : Integer;
END RECORD;



PROCEDURE Recherche_Seq(Nom_Bout: IN Unbounded_String; CaveF5: IN Cave_Bis; PRESENT: OUT BOOLEAN; ICI: OUT Integer) IS

H: Integer;

BEGIN
PRESENT:= False;
H :=0;
ICI := 0;
WHILE NOT PRESENT AND H <= CaveF5.Nbeff LOOP
IF CaveF5.Infos(H).Nom = Nom_Bout
Then
PRESENT := TRUE;
ICI := H;
ELSE
H := H + 1;
END IF;
END LOOP;

END Recherche_Seq;

PROCEDURE Ajouter(BOUF4 : In Bouteille; CaveF2: IN OUT Cave_Bis) IS

Quant_B : Integer;
Coul_B : CouleurVin;
Year_B : Integer;
J : Integer := 1;
Present : Boolean;
Ici: Integer;

BEGIN

IF CaveF2.NBeff<N
THEN
Put("Combien de bouteilles en ajoutez-vous?");
New_Line;
Get(Quant_B);
Put("Rentrez la couleur de votre vin: ");
New_Line;
Get(Coul_B);
Put("Quel est son millésime?");
New_Line;
GET(Year_B);

WHILE CaveF2.Infos(J).nom<BOUF4.Nom AND J <= CaveF2.Nbeff LOOP
J:=J+1;
END LOOP;
CaveF2.Nbeff := CaveF2.Nbeff + 1;
FOR L IN REVERSE J+1..CaveF2.Nbeff LOOP
CaveF2.Infos(L) := CaveF2.Infos(L-1);
END LOOP;
Recherche_Seq(BOUF4.Nom,CaveF2,Present,Ici);
IF PRESENT THEN
CaveF2.Infos(ICI).NOM:=BOUF4.Nom;
CaveF2.Infos(ICI).Couleur:=Coul_B;
CaveF2.INFOS(ICI).Millesime:=Year_B;
CaveF2.Infos(ICI).Quantite:=Quant_B;
END IF;

Else PUT("La cave est pleine ! ");
END IF;
END Ajouter; ```

最佳答案

好吧,那条线上唯一的索引是 H。
其中初始化为0。
它索引的东西的索引范围是 1 .. N。
所以...
不。不会工作。
但至少它会提前告诉你,而不是让你发现困难的方法。
你有一个不错的类型系统:学会使用它。
我建议定义一个整数的子类型,范围 1 .. 1000subtype MyIndex is Natural range 1 .. 1000;(删除 N 因为它现在是多余的:如果需要,请使用 MyIndex'Last)
并将该子类型命名为 Cave 的索引类型。
并声明该子类型的 H,而不是 Integer。
这样做后,创建该错误有点困难。
每个边界违规或缓冲区溢出或 Heartbleed 都是一个简单的类型错误。

关于compiler-errors - 艾达 : index check failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64434825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com