Вы должны извлечь этот вызов функции и затем присвоить результат указателю правильного типа. Используйте этот указатель в последующем вызове функции и освободите его. В любом случае вам понадобится дважды указатель - сначала для перехода к функции, а затем для перехода к free()
.
Пример:
for ( int i = 0; i < yk->m; i++ )
{
Coords range = {0,-1};
Coords ykc = {0,i};
p = dot_times_m( yv, matrix_pow(xv, i) ); // assign the result to p
set_m( yk, ykc, sum_i(p, 0, range) ); // use p in this call
free( p ); // free p after use
}
Другим способом может быть непосредственное использование этого назначения указателя в вызов цепочки, а затем освободить указатель следующим образом:
for ( int i = 0; i < yk->m; i++ )
{
Coords range = {0,-1};
Coords ykc = {0,i};
set_m( yk, ykc, sum_i( p = dot_times_m( yv, matrix_pow(xv, i) ), 0, range) );
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
free( p );
}
Но в этом случае вы бы пожертвовали читабельностью!