|
pointer returned in FREE_IT function was not allocated by ib_util_malloc
|
|||
---|---|---|---|
#18+
Тыкните носом, что я делаю не так. В одной UDF экспортируются две функции Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Функции реализованы так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
Вызов GF_INFO нормально отрабатывается. Вызов GF_INC_DDEGREE выбрасывает исключениеUnsuccessful execution caused by system error that does not preclude successful execution of subsequent statements. Bad written UDF detected: pointer returned in FREE_IT function was not allocated by ib_util_malloc. UDF: GF_INC_DDEGREE. Смотрю ProcessExplorer. В процесс загружена ib_util.dll из папки c:\Program Files\Firebird\Firebird_3_0\ версии 3.0.7.33374 В чем разница? В этой UDF еще много функций и работает только GF_INFO. В соседних UDF, которые написаны по тому же принципу, работают все функции С уважением, Vasilisk ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2021, 21:38 |
|
pointer returned in FREE_IT function was not allocated by ib_util_malloc
|
|||
---|---|---|---|
#18+
_Vasilisk_, free_it для возвращаемого Smallint - это МОЩНО. Не надо так. free_it в основном для cstring. Теоретически и smallint можно, но не нужно, ибо указатель больше чем сама переменная, и т.д. Кроме того, самый ужас вот тут Result^ := ADeg^; Нельзя так. в случае ошибки так и получается, что результату дан указатель, который не был аллокирован через IB_Util_Malloc. Это входной параметр. И вообще он передается как var, а не как psmallint. (понятно что это в обоих случаях ссылки, но для понимания лучше писать var a smallint, а не a psmallint). лучше почитать http://www.ibase.ru/udf_ok короче, возвращай smallint by value, и не выпендривайся :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2021, 22:06 |
|
pointer returned in FREE_IT function was not allocated by ib_util_malloc
|
|||
---|---|---|---|
#18+
_Vasilisk_, на всякий случай я еще дам ссылку на свою safeudf, в которой даны 3 примера. Возврат входного параметра, возврат через free_it, и возврат через входной параметр. Аллокирование через ib_util делается только для free_it, и смешивать возврат и через свою память и через входные переменные нельзя. http://www.ibase.ru/files/download/safeudf.zip ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2021, 22:12 |
|
pointer returned in FREE_IT function was not allocated by ib_util_malloc
|
|||
---|---|---|---|
#18+
kdv результату дан указатель, который не был аллокирован через IB_Util_Malloc. _Vasilisk_ Код: pascal 1.
Это не Код: pascal 1.
kdv короче, возвращай smallint by value, и не выпендривайся :-) Новые функции уже идут By Value ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2021, 22:17 |
|
pointer returned in FREE_IT function was not allocated by ib_util_malloc
|
|||
---|---|---|---|
#18+
kdv смешивать возврат и через свою память и через входные переменные нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2021, 22:17 |
|
pointer returned in FREE_IT function was not allocated by ib_util_malloc
|
|||
---|---|---|---|
#18+
Вот еще функция Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Ошибка та же ... |
|||
:
Нравится:
Не нравится:
|
|||
26.03.2021, 22:20 |
|
pointer returned in FREE_IT function was not allocated by ib_util_malloc
|
|||
---|---|---|---|
#18+
_Vasilisk_ Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.03.2021, 15:14 |
|
|
start [/forum/topic.php?fid=40&fpage=7&tid=1560074]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
161ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 262ms |
0 / 0 |