Правильное использование вызовов PROTECT и UNPROTECT в функциях C api для R - PullRequest
0 голосов
/ 03 марта 2019

Эта страница http://adv -r.had.co.nz / C-interface.html говорит

, если вы не защищаете каждый созданный вами объект R,сборщик мусора сочтет, что они не используются, и удалит их

. Также приводится пример кода

SEXP result = PROTECT(allocVector(REALSXP, 1));
REAL(result)[0] = asReal(a) + asReal(b);
UNPROTECT(1);

return result;

Если вызовы PROTECT и UNPROTECT используются для остановкиОбъекты SEXP не удаляются, если ваш код C выгружен, а сборщик мусора R запущен, тогда пример кода неверен.Если код C здесь прерван между вызовом UNPROTECT и последним оператором возврата, то result все равно будет удален, прежде чем он будет возвращен из функции.

Как правильно защититьЗначения SEXP, которые вы выделяете в функциях C api из сборки мусора во время работы кода C?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...