FP
объявляется так:
typedef struct _FP
{
unsigned short int rows;
unsigned short int columns;
double array[1]; /* Actually, array[rows][columns] */
} FP;
Вы предполагаете, что FP
упакован и не содержит отступов.Я не знаю, как XLL-файлы предназначены для компиляции, но я думаю, что вполне вероятно, что между columns
и array
есть заполнение для того, чтобы array
было выровнено на 8 байт.При настройках по умолчанию MSVC возвращает 16 для sizeof(FP)
, что поддерживает мою гипотезу.
Измените ваше распределение на:
g_FP = malloc((rows*cols-1)*sizeof(double) + sizeof(*g_FP));
Даже если это не является причиной вашей проблемы,Вышеприведенное распределение является логически правильной формой.
В противном случае я не вижу ничего плохого в вашем коде.Я думаю, что вы могли бы быть более явным при инициализации g_FP
до NULL
, но это второстепенный момент.