“*** 检测到堆栈粉碎 ***:./a.out 终止中止(核心转储)”- 数组插入
"*** stack smashing detected ***: ./a.out terminated Aborted (core dumped)" - array insertion
我从 Internet 上获得了以下代码,用于在数组中插入一个元素。我的问题是“如何增加数组的大小,尤其是在第一次插入时,每次执行循环打印时都会打印垃圾?”。我也很想知道我得到的错误的详细信息。
密码是
#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 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)
感谢您的宝贵时间。
您声明了一个大小为 5 的数组 LA。
int LA[] = {1,3,5,7,8};
稍后,您的代码尝试添加其他元素,但是 LA 的大小仍然是 5,因此您将值放入数组 space 您尚未分配。
有可能,数组是在堆栈上分配的,并且由于您正在写入不属于数组的区域,所以您弄乱了堆栈。
任何 printf 访问超出 LA 大小的索引都将是内存中该位置的任何内容
我从 Internet 上获得了以下代码,用于在数组中插入一个元素。我的问题是“如何增加数组的大小,尤其是在第一次插入时,每次执行循环打印时都会打印垃圾?”。我也很想知道我得到的错误的详细信息。
密码是
#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 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)
感谢您的宝贵时间。
您声明了一个大小为 5 的数组 LA。
int LA[] = {1,3,5,7,8};
稍后,您的代码尝试添加其他元素,但是 LA 的大小仍然是 5,因此您将值放入数组 space 您尚未分配。
有可能,数组是在堆栈上分配的,并且由于您正在写入不属于数组的区域,所以您弄乱了堆栈。
任何 printf 访问超出 LA 大小的索引都将是内存中该位置的任何内容