Le piège de la valeur partagée
Exercice · OCaml (option informatique), chapitre 5 — Les tableaux
Énoncé
Donner le contenu final de m dans chaque cas, et expliquer.
(* A *) (* B *)
let m = Array.make 2 (Array.make 2 0) let m = Array.make_matrix 2 2 0
in m.(0).(0) <- 1; m in m.(0).(0) <- 1; mCorrigé
(A) donne [|[|1; 0|]; [|1; 0|]|] : les deux « lignes » sont le même tableau (créé une seule fois par Array.make 2 0), si bien que modifier m.(0).(0) modifie aussi m.(1).(0).
(B) donne [|[|1; 0|]; [|0; 0|]|] : make_matrix crée des lignes indépendantes, donc seule la case visée change.
(Morale : pour un tableau de tableaux, jamais Array.make n (Array.make ...) ; toujours make_matrix ou Array.init n (fun _ -> Array.make ...).)
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.