Как часть большой программы, у меня есть метод, который вычисляет коэффициенты производной полинома.Но это не проблема :).В следующем коде, если я пропущу вызов realloc (), я получу ожидаемые результаты в (* coef).При использовании realloc один из элементов устанавливается в 0. Это моя ошибка или поведение realloc () действительно неожиданное?
void derive (double **coef, int size)
{
int i;
if (size<2)
free_vector (*coef);
else
{
for (i=0; i<size-1; ++i)
{
(*coef)[i] = (*coef)[i+1]*(i+1);
}
(*coef) = realloc ((*coef), size-1);
}
}
Я также приложу полный исходный код для тестовой программы, еслизапуск это поможет ...
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double *new_vector (int size)
{
double *vec = calloc (size, sizeof (double));
return vec;
}
void free_vector (double *vec)
{
if (vec)
{
free (vec);
vec = NULL;
}
}
void write_vector (FILE *f, double *vec, int size)
{
int i;
for (i=0; i<size; ++i)
fprintf (f, "%1.15lf\n", vec[i]);
fprintf (f, "\n");
}
void derive (double **coef, int size)
{
int i;
if (size<2)
free_vector (*coef);
else
{
for (i=0; i<size-1; ++i)
{
(*coef)[i] = (*coef)[i+1]*(i+1);
}
(*coef) = realloc ((*coef), size-1);
}
}
int main (void)
{
double *v = new_vector (5);
int i;
for (i=0; i<5; ++i)
v[i] = 3;
write_vector (stdout, v, 5);
derive (&v, 5);
write_vector (stdout, v, 4);
free_vector (v);
return 0;
}