Проблема с UDF под Линукс
Проблема с UDF под Линукс
Уважаемы подскажите в чем может быть проблема.
1. OS FedoraCore 4
2. СУБД FireBird 2.0
3. UDF библиотека FreeAdhocUdf
4. Написал собственную функцию, пересобрал пакет, обновил udf запускаю на выполнение, а функция не возвращает ничего, черезе IBExpert пишет NAN.
Для проверки уже далал ток что бы возвращалось хотя бы тоже значение что и передовалось на входе, история таже сама.
//Our
double *MultFloat(double *Value, double *Value2, int *RoundToNearest)
{
double *result = malloc(sizeof(double));
*result=*Value;
*result *=*Value2;
*RoundToNearest*=-1;
int multipler = pow(10,*RoundToNearest);
*result=floor((*result)*multipler+0.5)/multipler;
return result;
}
1. OS FedoraCore 4
2. СУБД FireBird 2.0
3. UDF библиотека FreeAdhocUdf
4. Написал собственную функцию, пересобрал пакет, обновил udf запускаю на выполнение, а функция не возвращает ничего, черезе IBExpert пишет NAN.
Для проверки уже далал ток что бы возвращалось хотя бы тоже значение что и передовалось на входе, история таже сама.
//Our
double *MultFloat(double *Value, double *Value2, int *RoundToNearest)
{
double *result = malloc(sizeof(double));
*result=*Value;
*result *=*Value2;
*RoundToNearest*=-1;
int multipler = pow(10,*RoundToNearest);
*result=floor((*result)*multipler+0.5)/multipler;
return result;
}
декларируешь как?
и вообще - аллокировать память под double через malloc - это перл еще тот. аллокирование и free_it нужно только для строк.
Не хватило сил примеры посмотреть?
и вообще - аллокировать память под double через malloc - это перл еще тот. аллокирование и free_it нужно только для строк.
Не хватило сил примеры посмотреть?
Последний раз редактировалось kdv 06 ноя 2007, 11:44, всего редактировалось 1 раз.
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Нет конечно. Я для примера написания функции взял
/
/
Код: Выделить всё
/ pm 21.08.04
// ct 2006-11-26 implementation of NULL for FB 2.0
double *fact(int *n)
{
if (!n)
return NULL;
else {
double *result = malloc(sizeof(double));
if (*n < 1 || *n > 100)
*result = 0.0;
else {
int i;
double f = 1.0;
for (i = 2; i <= *n; i++)
f *= i;
*result = f;
}
return result;
}
}
тебе? не знаю. наверное - "склероз". функцию (на сях, а не декларацию udf) перепиши так, чтобы она возвращала double по значению, а не по ссылке. и убери malloc.Так какой можно диагнох мне поставить?
В общем, посмотри на аналогичные функции рядом. по крайней мере в старой либе, что у меня на сайте, таких перлов нет, как и такой функции.