2016-12-23 6 views
2

У меня есть действительно ДЕЙСТВИТЕЛЬНО странные проблемы с NSString. Когда я читаю входной поток и преобразую данные в строку, я не могу установить что-либо равное этой строке. Вот код:Objc EXC_BAD_ACCESS при установке NSString равным другому

NSString *name = r.URL.lastPathComponent; 
NSString *data; 
NSInputStream *stream = r.HTTPBodyStream; 
uint8_t byteBuffer[1]; 
[stream open]; 

if (stream) 
{ 
    // Get the request body from the stream. Used for setting the file name 
    if (stream.hasBytesAvailable) 
    { 
     NSInteger bytesRead = [stream read:byteBuffer maxLength:4096]; 
     NSString *temp = [[NSString alloc] initWithBytes:byteBuffer length:bytesRead encoding:NSUTF8StringEncoding]; 

     data = temp; // EXC_BAD_ACCESS thrown here 
    } 
} 

Мне нужно скопировать строку в другую строку, но я не могу. Кто-нибудь знает, почему это происходит?

ответ

3

Ваш байтовый буфер является одним байтом, но вы читаете 4096 байт. Вероятно, это приведет к каскадной последовательности событий, которая завершится крахом.

+0

Вы абсолютно правы, поведение было настолько странным. Я подумал: «Что происходит». но да, я переписывал случайные разделы в памяти. Изменение размера буфера фиксировало все. – Minimi

+1

(Отметьте ответ как правильное, если он сделал трюк для вас) –

+2

@Minimi, вы можете захотеть привыкнуть использовать sizeof (byteBuffer) вместо фиксированного числа. – zneak