Adloun

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; m

Corrigé

(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 _ -&gt; 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.