"*** stack smashing detected ***: ./a.out terminated Aborted (core dumped)" - array inserion

Revaapriyan picture Revaapriyan · Jun 14, 2017 · Viewed 12.9k times · Source

I the following code in over Internet to insert an element in an array.My question is that how could the size of array was incremented especially​ at first insertion and an garbage is printed at every execution of printing for loop.I'm also eager to get details on the error I get.

The code is

#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]);
    }
}

The output is

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)

thanks for ur time.

Answer

lostbard picture lostbard · Jun 14, 2017

You have declared an array LA of size 5.

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

Later on, your code tried to add additional elements, however, the size of LA is still 5, so you are placing values in array space you do not have allocated.

Chances are then, that the array is being allocated on the stack, and since you are writing to areas that aren't part of the array, you are messing up the stack.

Any printf accessing indexes beyond the LA size are going to be whatever happens to be at that position in memory