Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не могу освободить память , free() крашит

вфЫВ ВФЫВ Ученик (99), закрыт 1 год назад
Получаю вызываю GetObjectName из игры, получает валидно, выводит, хорошо, только в самом getobjectname есть функция Malloca которая выделяет память, и это вызывает утечку памяти, пытаюсь освободить память, но вот краш с такой ошибкой. Если нужны будут структуры которые тут есть, такие как FString, предоставлю
 FString objectname(AActor* actor)
{
using GetObjectName = FString(*)(AActor* actor);

auto getobj_name = (GetObjectName)(Base + Offsets::OFFSET_GetObjectName);
return getobj_name(actor);
}
std::string getobjname1(AActor* actor)

{

FString gob = objectname(actor);
std::string Returned = gob.to_string( );

free(&gob);

return Returned;

}
Лучший ответ
Айран Просветленный (26733) 1 год назад
gob это FString. FString это объект, зачем ему делать free
вфЫВ ВФЫВУченик (99) 1 год назад
А как мне поступить?
 FString objectname(AActor* actor)
{
using GetObjectName = FString(*)(AActor* actor);
auto getobj_name = (GetObjectName)(Base + Offsets::OFFSET_GetObjectName);

return getobj_name(actor);

}
Тут я получаю имя посредством движковой функции GetObjectName , (base +Offsets::OFFSET_GetObjectName )
Получаю FString с именем, и в придачу фунцию malloca
Айран Просветленный (26733) вфЫВ ВФЫВ, я просто вижу, что функция objectname возвращает FString. и потом в другом месте ты делаешь free для FString, зачем то. Зачем вызывать free я по коду не понимаю, malloc в коде я не вижу, FString это должен(я предпологаю, не знаю откуда он) быть объект, с деструктором.
Остальные ответы
Сергей Гений (56253) 1 год назад
Удалять free можно только то, что было создано malloc.
У вас же нет желания удалять статические переменные такие как int, double, string или указатели на них?
Заметьте:
FString* gob = (FString*)malloc(sizeof(FString)); gob - указатель на обьект FString.
free(gob); - происходи удаление не самого указателя gob, а того места, на которое он указывает.
free(&gob); - а вот попытка удалить сам указатель окончится плачевно.
Похожие вопросы