未分配要释放的指针[Swift]

未分配要释放的指针[Swift],swift,tcp,tcpclient,Swift,Tcp,Tcpclient,我正在尝试读取TCP套接字连接中的长字符串。 对于读取短长度字符串,它工作正常。但当我试图发送长长度的base64编码图像时。它崩溃了,我试图增加到maxReadLength=10000,但仍然不起作用 阅读收到的消息 private func readAvailableBytes(stream: InputStream) { let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: maxRea

我正在尝试读取TCP套接字连接中的长字符串。 对于读取短长度字符串,它工作正常。但当我试图发送长长度的base64编码图像时。它崩溃了,我试图增加到
maxReadLength=10000
,但仍然不起作用

阅读收到的消息

 private func readAvailableBytes(stream: InputStream) {
            let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: maxReadLength)

            while stream.hasBytesAvailable {
                let numberOfBytesRead = inputStream.read(buffer, maxLength: maxReadLength)

                if numberOfBytesRead < 0 {
                    if let _ = inputStream.streamError {
                        break
                    }
                }

           ❌ Crashing in  below line The problem is that the buffer is allocated only once, but free'd every
time when 

 String(bytesNoCopy: buffer, length: numberOfBytesRead, encoding: .ascii, freeWhenDone: true)
private func readAvailableBytes(流:InputStream){
let buffer=UnsafeMutablePointer.allocate(容量:maxReadLength)
而stream.hasbytes可用{
让numberOfBytesRead=inputStream.read(缓冲区,maxLength:maxReadLength)
如果numberOfBytesRead<0{
如果let=inputStream.streamError{
打破
}
}

❌ 问题是缓冲区只分配了一次,但每一次都是空闲的 何时

let buffer = UnsafeMutablePointer<UInt8>.allocate(capacity: 4)
memcpy(buffer, "abcd", 4)

var s = String(bytesNoCopy: buffer, length: 4, encoding: .ascii, freeWhenDone: true)
// OK

s = String(bytesNoCopy: buffer, length: 4, encoding: .ascii, freeWhenDone: true)
// malloc: *** error for object 0x101d8dc40: pointer being freed was not allocated
这是一个简短的自包含示例,演示了该问题:

var buffer = [UInt8](repeating: 0, count: maxReadLength)
while inputStream.hasBytesAvailable {
    let numberOfBytesRead = inputStream.read(&buffer, maxLength: maxReadLength)
    if numberOfBytesRead < 0 {
        break
    }
    if let receivedMsg = String(bytes: buffer[..<numberOfBytesRead], encoding: .ascii) {
        // ...
    }
}

好的,谢谢你的回答,我会尝试解决方案。通过TCP套接字发送Base64编码的图像是好是坏?
如果让receivedMsg=String(bytes:buffer[..@Dhiru:上面的代码在我的Xcode 10中编译没有问题。好的,我不知道为什么它在我的Xcode(10.0)上显示错误您能看到这个吗?@Dhiru:您是否按照我的建议将
buffer
定义为
[UInt8]
数组?