2016-12-23 1 views
2

Je rencontre des problèmes vraiment VRAIMENT avec NSString. Lorsque je lis à partir d'un flux d'entrée et convertit les données en une chaîne, je ne suis pas en mesure de définir quelque chose d'égal à cette chaîne. Voici le code:Objc EXC_BAD_ACCESS lors de la définition d'un NSString égal à un autre

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 
    } 
} 

Je dois copier la chaîne sur une autre chaîne mais je ne peux pas. Est-ce que quelqu'un sait pourquoi cela se passe?

Répondre

3

Votre tampon d'octets est gros d'un octet mais vous y lisez 4096 octets. Ceci est susceptible de déclencher une séquence en cascade d'événements qui culminent dans l'accident.

+0

Vous avez absolument raison, le comportement était si étrange. J'étais comme "ce qui se passe". mais oui, j'écrivais des sections aléatoires en mémoire. Changer la taille de la mémoire tampon tout fixé. – Minimi

+1

(Marquer la réponse comme correcte si elle a fait l'affaire pour vous) –

+2

@Minimi, vous voudrez peut-être prendre l'habitude d'utiliser sizeof (byteBuffer) au lieu d'un nombre fixe. – zneak