2015-04-04 3 views
-3

J'ai recherché cette erreur particulière et j'ai trouvé que le problème sous-jacent implique que le nombre de boucles est incorrect et que le programme dépasse ses limites pour le tableau. Cependant, après avoir abaissé chaque matrice au point où la matrice a commencé à perdre des données en sortie, elle a continué à émettre la même erreur. Je suis encore nouveau en C/C++ mais tout aperçu de ce serait grandement apprécié.STATUS_STACK_BUFFER_OVERRUN a rencontré

Le programme semble aller jusqu'au bout et revient même à la méthode principale.

#include <stdio.h> 



void sortAr(char[]); 

    int main() 
{ 
    char a='y'; 
    char b,i; 
    char c[20]; 
    int x=0,n=0,z=0; 
    while (x<=19) 
    { 
     c[x]='@'; 
     x++; 
    } 

    printf("Enter 20 letters: \n"); 

    while (z<=20) //(The '=' caused my problem, removed and it runs fine.) 
    { 
     z++; 
     x=0; 
     b='y'; 
     scanf("%c",&i); 
     while (x<=19) 
     { 
      if (c[x]==i) 
       b='n'; 
      x++; 
     } 

     if (b=='y') 
     { 
      c[n]=i; 
      n++; 
     } 
    } 
    printf("\n"); 
    printf("The nonduplicate values are: \n");  

    sortAr(c); 

} 





    void sortAr(char ar[]) 
    { 
     char z; 
    for (int i = 0; i <= 19; i++) 
    { 
     for (int j=i+1; j <= 19; ++j) 
     { 
      if (ar[i]>ar[j]) 
      { 
       z = ar[i]; 
       ar[i] = ar[j]; 
       ar[j] = z; 
      } 
     } 
    } 
    for (int i = 0; i < 20; i++) 
    { 
     if(ar[i]=='@') 
      continue; 
     printf("%c ", ar[i]); 
    } 
    printf("\n"); 
    } 
+0

Vous ne l'avez pas réinitialiser 'x' avant la 2ème utilisation. –

+0

Ah oui, j'ai oublié de rajouter ça après avoir testé des pointeurs et des tableaux de caractères pour stocker des valeurs. Je suis allé de l'avant et enlevé le z = 20 suivant; while (x <= 19) { si (c [x] == '@') z--; x ++; } – Kal

+1

Je vous recommande d'inspecter votre code avec un débogueur qui parcourt ligne par ligne. C'est probablement plus rapide que de l'afficher ici, et d'attendre que les autres le fassent pour vous. –

Répondre

1

Je trouve l'erreur à:

while (z<=20) 

La raison en est le tableau écraserait caractères qu'autorisé en exécutant plusieurs fois que le tableau avait indexé dans la mémoire. En conséquence, il a écrit dans la mémoire qui ne lui a pas été allouée et a causé le Stack_Buffer_Overrun.

Trace Z: 

Z was initialized to 0. 
Array was initialized to 20. 

While loop starts with Z as the counter for read-ins. 
z=0 array=1 1st run, 
z=1 array=2 2nd run, 
z=2 array=3 3rd run, 
z=3 array=4 4th run, 
... 
z=20 array=21 21st run. (Array cannot hold 21st character and results in Stack_Buffer_Overrun.) 

Solution:

change while(z<=20) -> while(z<20)