Если вам нужно перераспределить массив, то он изначально должен быть выделен динамически. Поэтому этот код
int arr[6];
//...
ptr = (int *)realloc(arr, sizeof(int) * a);
недействителен.
Обратите внимание на то, что в соответствии с заданием вам нужно написать функцию, которая перераспределяет массив.
Имейте в виду, что Это очень плохой стиль программирования - использовать "маги c числа", такие как 5
. Вместо этого используйте именованные константы или присвойте такие числа переменным и используйте их.
Программа может выглядеть следующим образом.
#include <stdio.h>
#include <stdlib.h>
int * resize( int *a, size_t n, size_t m )
{
int *tmp = realloc( a, ( n + m ) * sizeof( int ) );
if ( tmp != NULL )
{
int sum = 0;
size_t i = 0;
while ( i < n ) sum += tmp[i++];
while ( i < n + m )
{
tmp[i] = sum;
sum += tmp[i++];
}
}
return tmp;
}
int main(void)
{
size_t n = 5;
int *a = malloc( n * sizeof( int ) );
size_t m = 0;
printf( "Enter %zu numbers. The last number shall be greater than 0: ", n + 1 );
for ( size_t i = 0; i < n; i++ )
{
scanf( "%d", a + i );
}
scanf( "%zu", &m );
int *tmp = resize( a, n, m );
if ( tmp != NULL )
{
a = tmp;
}
else
{
m = 0;
}
for ( size_t i = 0; i < n + m; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
free( a );
return 0;
}
Вывод программы может выглядеть как
Enter 6 numbers. The last number shall be greater than 0: 1 2 3 4 5 6
1 2 3 4 5 15 30 60 120 240 480 960 1920 3840 7680