A propos de la mémoire des tableaux statiques
Résolu
Erdouh
Messages postés
7
Statut
Membre
-
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
- Dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. - Guide
- Barbara veut calculer automatiquement son budget dans un tableau. citez un des logiciels lui permettant de faire des calculs sur des tableaux de nombres (tableur). - Forum Excel
- Fusionner deux tableaux excel - Guide
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