简体   繁体   English

“检测到*** ***堆栈粉碎失败:./ a.out已终止,异常终止(核心转储)”-阵列插入

[英]“*** stack smashing detected ***: ./a.out terminated Aborted (core dumped)” - array inserion

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. 感谢您的时间。

You have declared an array LA of size 5. 您已声明大小为5的数组LA。

 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. 稍后,您的代码尝试添加其他元素,但是LA的大小仍然为5,因此您将值放置在尚未分配的数组空间中。

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 超出LA大小的任何printf访问索引都将是内存中该位置的任何情况

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM