插入一维数组的算法,这里发生了什么?

时间:2015-02-14 17:43:23

标签: c arrays algorithm data-structures

#include <stdio.h>

int main()
{
int arr[5], size, i, pos, elem;

printf("Enter the size of array(less than 100)\n");
scanf("%d",&size);

printf("\nEnter the elements of array one by one\n");

for ( i = 0; i < size; i++)
scanf("%d",&arr[i]);

printf("\nEnter the position of insertion\n");
scanf("%d",&pos);

printf("\nEnter the element\n");
scanf("%d",&elem);

for ( i = size - 1 ; i >= pos - 1; i--)
    arr[i + 1] = arr[i];

arr[pos - 1] = elem;

printf("\nInserted array is\n");

for ( i = 0; i <= size; i++)
    printf("\t%d",arr[i]);
    printf("\n");



return 0;
}

在上面的代码片段中,我试图在一维数组中的某个特定位置插入一个元素。我完全理解插入背后的算法,但似乎有些不对劲。既然我已故意声明数组 int arr [5]我不应该在数组的末尾插入一个元素,因为最后一个元素没有内存位置可去,它应该被丢弃但无论我尝试插入哪个位置,我都会获得正确的输出。我想知道这是怎么回事?
为什么数组大小增加,据我所知,内存在编译时被分配给一个数组,那么大小如何在运行时增加?
请在我的理解中指出愚蠢。

2 个答案:

答案 0 :(得分:1)

访问数组越界导致 undefined behvaior

您可能会看到它有时会工作,有时可能无效。(您最终可能会遇到崩溃

所以只需遵循标准并停止访问数组越界。 摆脱未定义的行为

答案 1 :(得分:0)

您正在写入您未分配的内存。最终,当你点击你没有写入权限的内存时,你会遇到分段错误。

C / C ++不像其他语言(如Java)那样检查边界。它将它留给操作系统来确定你何时访问你不应该访问的内存。