2011-12-26 2 views
0

Je commence à apprendre c et je ne trouve pas d'exemple clair de gestion des violations de mémoire. Actuellement, j'ai écrit un morceau de code qui utilise une variable et un tableau.Gestion des violations de données dans c

J'affecte une valeur à la variable, puis remplit le tableau avec un ensemble de valeurs initiales. Cependant, l'une des valeurs du tableau est sauvegardée à la même adresse que la variable et écrase donc la variable.

Peut quelqu'un s'il vous plaît me donner un exemple simple de la façon de traiter ces erreurs ou pour éviter de telles erreurs .... merci

+1

pouvez-vous fournir du code? – Odys

Répondre

2

Ceci est une supposition, mais semble à peu près votre problème.
Vous remplacez les limites du tableau. C ne vous protège pas contre l'écriture au-delà des limites d'un tableau alloué. En tant que programmeur, vous devez vous assurer de ne pas le faire. Ne pas le faire se traduira par comportement indéfini et alors tout peut arriver (littéralement) votre programme pourrait fonctionner ou ne pas ou montrer un comportement inhabituel.

Pour exemple:

int arr[10]; 

Déclare un tableau de 10 entiers et la plage de validité est l'indice 0-9,
Vous devez vous assurer que votre programme utilise valides les indices.

3

Une fois qu'une erreur telle qu'une violation de mémoire s'est produite dans C, vous ne pouvez pas la 'gérer'. Donc, vous devez l'éviter en premier lieu. La façon de faire ce que vous voulez est la suivante:

int a[10]; 
int i; 
for(i = 0; i < 10; i++) 
    a[i] = 5; 
+0

Est-il possible d'éviter la violation de la mémoire en premier lieu. Je veux dire qu'il serait possible de vérifier en définissant le tableau que chaque adresse du tableau est libre et n'est pas déjà utilisée. Et si oui, comment ferais-je ... Merci – Ranjeet

+0

Il n'y a rien de tel que "vérifier lors de la définition du tableau que chaque adresse du tableau est libre et n'est pas déjà utilisée". Quand vous dites 'int a [10]' on vous donne un tableau parfaitement valide dans lequel tous les 10 éléments sont garantis et disponibles pour vous. Mais pas plus de 10. –