2016-12-23 2 views
2

NSStringで本当に本当に奇妙な問題があります。入力ストリームから読み込んでデータを文字列に変換すると、その文字列と同じものを設定することができません。コードは次のとおりです。Objc NSStringを別のものに設定するときのEXC_BAD_ACCESS

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

あなたのバイトバッファは1バイトですが、4096バイトを読み込んでいます。これは、クラッシュに終わるカスケードな一連のイベントを引き起こす可能性があります。

+0

あなたは絶対に正しいです、その行動はとても奇妙でした。私は「何が起こっているか」のようでした。しかし、確かに、私はメモリ内のランダムなセクションを上書きしていました。バッファサイズを変更するとすべてが修正されました。 – Minimi

+1

(あなたのためにその答えが正しいとマークしてください) –

+2

@ Minimi、固定数の代わりにsizeof(byteBuffer)を使う傾向があります。 – zneak

関連する問題