Обновить
2
0

Пользователь

Отправить сообщение
Очень жаль что не видел это видео раньше. Спасибо вам большое!
Честно говоря, я не пользовался, но да, действительно можно.

        var pointer: UnsafeMutableBufferPointer<UInt8>?
        array.withUnsafeMutableBufferPointer(){ bp in
                pointer = bp
        }
        guard  pointer != nil else {return nil}
        let structPointer = flipStringToStruct(pointer!.baseAddress , Int32(array.count))

На сколько я понял вы предлагаете что то такое?
Здравствуйте! Спасибо за ваш комментарий.
в Swift нельзя просто вызвать free?

В Swift можно вызвать функцию free и передать в нее любой указатель, но так как память выделяется в Си коде, я решил ее там и освобождать. Кроме того, если вы будете использовать эти функции на другом языке программирования, то вам все равно придется как то освобождать память.
почему freeSMemmory не может освободить и строку тоже?

Я так понимаю, что тут вопрос в том, почему «freeMemmory»(она принимает параметр с void*) не может также освободить и структуру? Она может. Отвечая на ваш вопрос, потому что функции freeSMemmory ждет указатель на структуру. Вы получите ошибку типа «Cannot convert value of type 'UnsafeMutableRawPointer' to expected argument type 'UnsafeMutablePointer?'». Хотелось обратить внимание на типы данных по указателю. Можно было и обойтись, согласен.
почему «memmory» а не memory?..

Ошибся.
зачем нужна длина строки в структуре? строка как была null-terminated, так и осталась

В этом конкретном случае, вы конечно же правы. Можно считать каждый символ и смотреть не '\0' ли он. Но если у вас есть массив байт, который не обязательно закрыт, размер данных пригодится.
зачем два раза выделять память в функции, которая возвращает структуру?

Вы про то, что можно написать что то типа:
structure->result = result;

и не освобождать ее внутри? Если да, то конечно можно.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность