A propos de la mémoire des tableaux statiques
Résolu
Erdouh
Messages postés
7
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je me posais une question concernant les tableaux en C :
Quand j'alloue un tableau statique, par exemple, de taille 4:
int tab[4];
Que se passe-t-il si j'essaie de donner des valeurs aux indices 4,5,6,7,8, ... par exemple ?
J'ai fait des essais; et il arrive que ça plante, ou pas.
Exemple : (où ça plante)
int i; int tab[4];
for(i=0; i<=10; i=i+1)
{
tab[i]=5;
}
Exemple : (où ça ne plante pas)
int i; int tab[4];
for(i=0; i<=5; i=i+1)
{
tab[i]=5;
}
Dans les deux cas, j'essaie d'accéder à au moins deux cases non allouées.
Pourquoi il arrive que ça plante, et parfois non ? J'essaye surtout de comprendre ce qui se passe au sein de la mémoire lorsqu'on veut donner une valeur à une case non définie.
Merci d'avance,
Cordialement.
Je me posais une question concernant les tableaux en C :
Quand j'alloue un tableau statique, par exemple, de taille 4:
int tab[4];
Que se passe-t-il si j'essaie de donner des valeurs aux indices 4,5,6,7,8, ... par exemple ?
J'ai fait des essais; et il arrive que ça plante, ou pas.
Exemple : (où ça plante)
int i; int tab[4];
for(i=0; i<=10; i=i+1)
{
tab[i]=5;
}
Exemple : (où ça ne plante pas)
int i; int tab[4];
for(i=0; i<=5; i=i+1)
{
tab[i]=5;
}
Dans les deux cas, j'essaie d'accéder à au moins deux cases non allouées.
Pourquoi il arrive que ça plante, et parfois non ? J'essaye surtout de comprendre ce qui se passe au sein de la mémoire lorsqu'on veut donner une valeur à une case non définie.
Merci d'avance,
Cordialement.
A voir également:
- A propos de la mémoire des tableaux statiques
- Mémoire vive - Guide
- RAM : type, format, CAS, vitesse, tout sur la mémoire vive - Guide
- Tableaux croisés dynamiques - Guide
- Fusionner deux tableaux excel - Guide
- En informatique, les informations sont codées par des 0 et des 1, appelés bits. un bit correspond à un espace mémoire. parmi les séquences ci-dessous, lesquelles occupent le moins d'espace en mémoire ? - Forum Programmation
1 réponse
Salut,
Pour faire court, ton tableau n'est en fait qu'un pointeur qui pointe vers la case mémoire de départ. Le fait de lui donner une dimension ne fait que réserver des espaces, c'est à dire que personne d'autre ne pourra les utiliser.
Le fait de continuer à écrire en dehors des limites va simplement continuer à écrire dans la mémoire, mais rien ne dis que tu ne vas pas écrire sur une case réservé à autre chose (ca déclenche une exception) ou qu'entre le moment où tu écris et celui où tu lis, la case n'a pas été réservée par quelqu'un d'autre (tu prends donc le risque de récupérer n'importe quoi).
Dis toi que c'est un peu comme une date de péremption. La dépasser n'est pas conseillé mais en soit c'est faisable (sauf que dans le cas du dev, tu as 99% de possibilité d'avoir des soucis ^^)
naga
Pour faire court, ton tableau n'est en fait qu'un pointeur qui pointe vers la case mémoire de départ. Le fait de lui donner une dimension ne fait que réserver des espaces, c'est à dire que personne d'autre ne pourra les utiliser.
Le fait de continuer à écrire en dehors des limites va simplement continuer à écrire dans la mémoire, mais rien ne dis que tu ne vas pas écrire sur une case réservé à autre chose (ca déclenche une exception) ou qu'entre le moment où tu écris et celui où tu lis, la case n'a pas été réservée par quelqu'un d'autre (tu prends donc le risque de récupérer n'importe quoi).
Dis toi que c'est un peu comme une date de péremption. La dépasser n'est pas conseillé mais en soit c'est faisable (sauf que dans le cas du dev, tu as 99% de possibilité d'avoir des soucis ^^)
naga
J'avais en fait un tableau dont je ne récupérais pas certaines valeurs à certains indices ; je me demandais ce qu'il en advenait de celles-ci.
A priori, ça ne gêne pas au niveau de l'exécution du code si je ne cherche pas à les récupérer ; mais je vais éviter, ça donnera un code plus propre. =)
naga