Comment malloc alloue la memoire ?
fab
-
Marden Messages postés 1075 Statut Membre -
Marden Messages postés 1075 Statut Membre -
bonjour,
j'alloue dynamiquement un tableau de long double de 100 éléments. Si je demande d'afficher la valeur du 101 eme élément,
il me donne 0. Je ne comprends pas pourquoi il ne detecte pas
d'erreur a la compilation puisque je demande la valeur d'un
élément qui normalement ne devrait pas exister. Comment
malloc alloue la mémoire ?
merci d'avance pour toute réponse
j'utilise kdevelop sous debian woody
j'alloue dynamiquement un tableau de long double de 100 éléments. Si je demande d'afficher la valeur du 101 eme élément,
il me donne 0. Je ne comprends pas pourquoi il ne detecte pas
d'erreur a la compilation puisque je demande la valeur d'un
élément qui normalement ne devrait pas exister. Comment
malloc alloue la mémoire ?
merci d'avance pour toute réponse
j'utilise kdevelop sous debian woody
A voir également:
- Comment malloc alloue la memoire ?
- Mémoire vive - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- C'est un secret bien gardé : ce réglage d'expert peut doper les performances de votre PC - Guide
- Nettoyer memoire iphone - Guide
- Mémoire virtuelle pour 32 go de ram - Guide
1 réponse
Vraisemblablement, mais sans garantie (à voir dans les sources Linux ?) :
L'allocation dynamique s'effectue par blocs (pour des raisons d'optimisation), dont la taille doit dépendre de l'implémentation, et c'est tout le bloc qui n'est pas protégé. Contrairement à l'allocation "statique" effectuée depuis le code, où le compilateur peut connaître les limites requises. Ceci dit, les vérifications de ce type me semblent être de la responsabilité du programmeur.
Dans le même d'idée, la fin d'une chaîne de caractères, mal définie et/ou mal gérée, est le premier "\0" rencontré qui peut être ... n'importe où.
L'allocation dynamique s'effectue par blocs (pour des raisons d'optimisation), dont la taille doit dépendre de l'implémentation, et c'est tout le bloc qui n'est pas protégé. Contrairement à l'allocation "statique" effectuée depuis le code, où le compilateur peut connaître les limites requises. Ceci dit, les vérifications de ce type me semblent être de la responsabilité du programmeur.
Dans le même d'idée, la fin d'une chaîne de caractères, mal définie et/ou mal gérée, est le premier "\0" rencontré qui peut être ... n'importe où.