Почему размер массива меняется сам по себе, даже если я не выполняю никаких операций для этого? - PullRequest
0 голосов
/ 20 октября 2019

Я делал эту программу, используя язык Си, который в основном принимает статический массив целых чисел, уже в возрастающем порядке, и целое число, которое будет добавлено в этот массив. Даже после добавления последовательность целых чисел в массиве должна оставаться в порядке возрастания. Я написал следующую программу:

/*WAP to accept a sorted array and insert an integer
value at its correct place using function*/

#include<stdio.h>

void showArray(int *location,int size)
    {
        for(int i=0;i<size;i++)
            {
                printf("%d ",*location);
                location++;
            }
    }

void insertElement(int *location,int element,int size)
    {
        /*unaltered_elements refers to the elements 
        whose position has not been changed*/
        int unaltered_elements=0;
        int insertion_status=0;
        while(insertion_status==0)  //while insertion of element is incomplete
            {
                if(*location>=element)
                    {
                        /*When the entered element is greater than
                        the element at the position, it is from here that the 
                        shifting of elements to next position begins*/
                        int temp1=element;
                        for(int i=0;i<size-unaltered_elements;i++)   //insertion loop
                            {
                                int temp2=*location;
                                *location=temp1;
                                temp1=temp2;
                                location++;
                            }
                        *location=temp1;
                        insertion_status=1;
                    }
                else
                    {
                        //no change in position of elements
                        location++;
                        unaltered_elements++;
                        insertion_status=0;
                    }
            }
    }

int main()
    {
        int array[]={1,3,5,7,9,11,12},element;
        int size_of_array=sizeof(array)/sizeof(int);
        printf("\nEnter the element to be inserted: ");
        scanf(" %d",&element);
        //Original Array
        printf("\nOriginal Array\t: ");
        showArray(&array[0],size_of_array);
        //New Array
        printf("\nSIZE BEFORE INSERTING ELEMENT: %d\n",size_of_array);
        insertElement(&array[0],element,size_of_array);
        printf("\nSIZE AFTER INSERTING ELEMENT: %d\n",size_of_array);
        printf("\nNew Array\t: ");
        showArray(&array[0],size_of_array+1);
        return 0;
    }

РЕЗУЛЬТАТ:

Enter the element to be inserted: 2

Original Array  : 1 3 5 7 9 11 12
SIZE BEFORE INSERTING ELEMENT: 7

SIZE AFTER INSERTING ELEMENT: 12

New Array       : 1 2 3 5 7 9 11 12 6422284 3620864 6422352 4199048 1

Когда я проверял размер до и после вставки элемента (то есть вызова функции insertElement () в main ()) я обнаружил, что он другой. Как это изменилось, даже если я не изменил это в своей программе?

Вот что я уже пробовал / нашел:

  1. Я проверил размер во вставкеЗациклился в функции insertElement () и обнаружил, что размер не изменился в теле функции, но обнаружил, что значение изменилось в функции main () после вызова insertElement ().

  2. Такжеразмер массива после вызова функции insertElement () оказался равным последнему элементу массива. Например: если массив имеет элементы: 1 3 5 7 9, размер изменился до 9 после вызова функции insertElement (). Я нашел его, изменив последнее значение в объявлении массива.

Обратите внимание, что у меня нет проблем с вставкой элемента в нужное место;просто с неправильным размером массива, потому что это приводит к печати дополнительных значений

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...