Объявленный указатель со значением c хранения
struct arr{
int *temp;
int size;
}*var;
инициализируется нулями и не указывает на выделенную память.
Таким образом, ваша программа имеет неопределенное поведение.
По крайней мере, вам нужно выделить массив типа struct arr
с регистрами elements
перед вызовом функций.
Например
var = malloc( cases * sizeof( struct arr ) );
Что касается вопроса
В приведенном выше коде всякий раз, когда я заменяю (var + count) -> ... на var [count] ->, появляется сообщение об ошибке: «неверный аргумент типа» ->
, тогда выражение var[count]
не является указателем. Оно имеет тип struct arr
.
Вот демонстрационная программа, которая показывает, как может быть выполнено назначение.
#include <stdio.h>
#include <stdlib.h>
struct arr
{
int *temp;
size_t size;
};
void inputArray( struct arr *var, size_t count )
{
printf( "Enter the size of the array: " );
size_t n = 0;
scanf( "%zu", &n );
( var + count )->temp = malloc( n * sizeof( int ) );
if ( ( var + count )->temp == NULL )
{
( var + count )->size = 0;
}
else
{
( var + count )->size = n;
if ( n != 0 )
{
printf( "Enter %zu element(s) of the array: ", n );
for ( size_t i = 0; i < n; ++i )
{
scanf( "%d", &( var + count)->temp[i] );
}
}
}
putchar( '\n' );
}
void displayArray( const struct arr *var, size_t count )
{
for ( size_t i = 0; i < ( var + count )->size; ++i )
{
printf( "%d ", ( var+count )->temp[i] );
}
putchar( '\n' );
}
int main(void)
{
printf( "Enter the no of test cases: " );
size_t n = 0;
scanf( "%zu", &n );
struct arr *var = malloc( n * sizeof( struct arr ) );
if ( var == NULL )
{
puts( "Error. Not enough memory." );
n = 0;
}
for ( size_t i = 0; i < n; i++ )
{
printf( "Entering test case %zu:\n", i+1 );
inputArray( var, i );
}
if ( n != 0 )
{
puts( "You have entered the following" );
for ( size_t i = 0; i < n; ++i )
{
printf("Test case %zu:" ,i + 1 );
displayArray( var, i );
}
for ( size_t i = 0; i < n; ++i )
{
free( ( var + i )->temp );
}
}
free( var );
return 0;
}
Вывод программы может выглядеть как
Enter the no of test cases: 5
Entering test case 1:
Enter the size of the array: 1
Enter 1 element(s) of the array: 1
Entering test case 2:
Enter the size of the array: 2
Enter 2 element(s) of the array: 1 2
Entering test case 3:
Enter the size of the array: 3
Enter 3 element(s) of the array: 1 2 3
Entering test case 4:
Enter the size of the array: 4
Enter 4 element(s) of the array: 1 2 3 4
Entering test case 5:
Enter the size of the array: 5
Enter 5 element(s) of the array: 1 2 3 4 5
You have entered the following
Test case 1:1
Test case 2:1 2
Test case 3:1 2 3
Test case 4:1 2 3 4
Test case 5:1 2 3 4 5