Arrays &***检测到堆栈崩溃***:./a.out终止中止(堆芯转储)“-阵列内插
我在Internet上使用以下代码在数组中插入一个元素。我的问题是数组的大小如何增加 在第一次插入时,每次执行printing for循环时都会打印一个垃圾。我也很想知道我得到的错误的详细信息 代码是Arrays &***检测到堆栈崩溃***:./a.out终止中止(堆芯转储)“-阵列内插,arrays,insertion,Arrays,Insertion,我在Internet上使用以下代码在数组中插入一个元素。我的问题是数组的大小如何增加 在第一次插入时,每次执行printing for循环时都会打印一个垃圾。我也很想知道我得到的错误的详细信息 代码是 #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
#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]);
}
}
谢谢您的时间。您已声明大小为5的数组LA
int LA[] = {1,3,5,7,8};
稍后,您的代码尝试添加其他元素,但是,LA的大小仍然是5,因此您将值放置在尚未分配的数组空间中
然后,很可能会在堆栈上分配数组,并且由于您正在写入不属于数组的区域,因此会弄乱堆栈
超出LA大小的任何printf访问索引都将是内存中该位置的任何内容错误的详细信息是堆栈已损坏。查阅“为了乐趣和利润而粉碎堆栈”。(免责声明:我还没有阅读代码)我认为程序只在第一个while循环中注销数组的末尾。然后,他只是从数组的末尾格式化printf。然后main尝试退出并意识到堆栈已损坏(尽管只有四个字节)。
int LA[] = {1,3,5,7,8};