2017-06-14 9 views
0

Je le code suivant dans Internet pour insérer un élément dans un tableau.Mon question est que comment pourrait la taille du tableau a été incrémentée en particulier à la première insertion et une poubelle est imprimée à chaque exécution de l'impression pour la boucle. Je suis également désireux d'obtenir des détails sur l'erreur que je reçois."*** destruction de la pile détectée ***: ./a.out terminée Aborted (core dumped)" - insertion de tableau

Le code est

#include <stdio.h> 
void main() 
{ 
    int k = 3, n = 5, i = 0, j = n; 
    int LA[] = {1,3,5,7,8}; 
    printf("The original array elements are :\n"); 
    for(i = 0; i<n; i++) { 
     printf("%d ",LA[i]); 
    } 
    n = n + 1; 
    while(j >= k){ 
     LA[j+1] = LA[j]; 
     j = j - 1; 
    } 
    LA[k] = 10; 
    printf("\nThe array elements after insertion1 :\n"); 
    for(i = 0; i<n; i++) { 
     printf("%d ",LA[i]); 
    } 
    n = n + 1; 
    while(j >= k){ 
     LA[j+1] = LA[j]; 
     j = j - 1; 
    } 
    LA[k] = 20; 
    printf("\nThe array elements after insertion2 :\n"); 
    for(i = 0; i<n; i++) { 
     printf("%d ",LA[i]); 
    } 
    n = n + 1; 
    while(j >= k){ 
     LA[j+1] = LA[j]; 
     j = j - 1; 
    } 
    LA[k] = 30; 
    printf("\nThe array elements after insertion3 :\n"); 
    for(i = 0; i<n; i++) { 
     printf("%d ",LA[i]); 
    } 
} 

La sortie est

The original array elements are : 
1 3 5 7 8 
The array elements after insertion1 : 
1 3 5 10 7 8 
The array elements after insertion2 : 
1 3 5 20 7 8 2087809280 
The array elements after insertion3 : 
*** stack smashing detected ***: ./a.out terminated 
1 3 5 30 7 8 2087809280 -1077687568 Aborted (core dumped) 

merci pour le temps ur.

+0

Détails de l'erreur sont que vous corrompu la pile. Cherchez "briser la pile pour le plaisir et le profit". (avertissement: je n'ai pas encore lu le code) –

Répondre

3

Vous avez déclaré un tableau LA de la taille 5.

int LA[] = {1,3,5,7,8}; 

Plus tard, votre code a essayé d'ajouter des éléments supplémentaires, cependant, la taille de Los Angeles est encore 5, de sorte que vous placez des valeurs dans l'espace de tableau vous n'avez pas alloué.

Il y a des chances que le tableau soit alloué sur la pile, et puisque vous écrivez dans des zones qui ne font pas partie du tableau, vous gâchez la pile.

Tout printf accès à des index au-delà de la taille LA vont être ce qui arrive à être à cette position dans la mémoire

+0

Je pense que le programme n'écrit que la fin du tableau pendant la première boucle while. Ensuite, il ne fait que formater printf depuis la fin du tableau. Ensuite, Main tente de sortir et réalise que la pile est corrompue (seulement quatre octets). –