A propos de la mémoire des tableaux statiques

Résolu/Fermé
Erdouh Messages postés 7 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 1 mars 2014 - Modifié par Erdouh le 8/11/2013 à 09:25
 Utilisateur anonyme - 8 nov. 2013 à 10:48
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.


1 réponse

Utilisateur anonyme
8 nov. 2013 à 09:50
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
1
Erdouh Messages postés 7 Date d'inscription vendredi 8 novembre 2013 Statut Membre Dernière intervention 1 mars 2014
Modifié par Erdouh le 8/11/2013 à 10:31
Merci pour cette réponse, c'est très clair ! :)
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. =)
0
Utilisateur anonyme
8 nov. 2013 à 10:48
pas de problèmes, bon dev ;)

naga
0