Я использую драйвер Cassandra C ++, и у меня есть сомнения относительно некоторых функций, которые я использовал в моей программе, где у меня есть такие функции:
CassStatement* func()
{
/* Code */
CassStatement* l_stmt= cass_prepared_bind(cass_future_get_prepared(l_future));
//l_future is of type CassFuture* used in the 'Code' section
return(l_stmt);
}
Так как l_stmt является локальной переменной, я немного запутался и хочу убедиться, что я не делаю здесь никакого недопустимого доступа к памяти. Например, в моей основной программе, если я делаю
CassStatement* x=func();
тогда это нормально? Я надеюсь, что это нормально, потому что я думаю, что, хотя l_stmt внутри func является локальной переменной (в стеке), но адрес, на который он указывает, будет в куче (возвращаемой cass_prepared_bind ()), и, следовательно, это должно быть хорошо!
Я надеюсь, что это нормально, потому что я думаю, что, хотя l_stmt внутри func является локальной переменной (в стеке), но адрес, на который он указывает, будет в куче (возвращаемой cass_prepared_bind ()), и, следовательно, это должно быть хорошо!
Это правильно. Согласно документация:
[cass_prepared_bind
] Возвращает связанное утверждение, которое должно быть освобождено.
Поэтому вы должны сами освободить заявление, используя cass_prepared_free
,
Других решений пока нет …