У меня есть C char *cArray
и его длина, и мне нужно, чтобы преобразовать его в NSData Я сделал это с:NSData причиной утечки
var data: NSData? = NSData(bytesNoCopy: cArray, length: Int(length))
И это работает. Проблема в том, что это вызывает некоторую утечку памяти. Я не знаю, почему, но я могу видеть, что в средствах выделения это malloc 64 байта и не освобождает его, когда функция заканчивается, или когда я устанавливаю ее на нуль.
Этот код называется много, поэтому мне нужно, чтобы он был бездействующим. Что я могу сделать, чтобы предотвратить утечку?
Edit: это код
func on_data_recv_fn(buf: UnsafeMutablePointer<CChar>, length: CInt, user_data: UnsafeMutablePointer<Void>) -> CInt {
guard buf != nil else {
NSLog("on_data_recv_fn buf is nil")
return -1
}
//var data: NSData? = NSData(bytesNoCopy: buf, length: Int(length), freeWhenDone: true)
var data: NSData? = NSData(bytesNoCopy: buf, length: Int(length))
let succeededWriting = Int(PacketTunnelProvider.sendPackets(data!))
data = nil
return CInt(succeededWriting)
}
Согласно документам памяти, есть утечка здесь. Функция sendPackets не хранит данные, поэтому проблемы там нет.
Редактировать: Прикрепленное изображение с инструментов.
Полный способ код пожалуйста. – Darko
См. Отредактированный ответ – Roee84
Что произойдет, если вы вызываете предупреждение о памяти? Выпущена ли память? – Darko