2011-10-20 1 views
11

J'ai utilisé Twitter-OAuth-iPhone pour synchroniser le message dans mon application. Tout va bien dans iOS4.
Après mise à niveau vers iOS5, choisissez le menu 'Product'> 'Analyze', et a reçu quelques avertissements.Erreur logique: L'opérande de gauche de '&' est une valeur de poubelle

En NSData + Base64.m, Il est avertissement 'L'opérande gauche de' & 'est une valeur poubelle' enter image description here

Codes ici:

if(ixinbuf == 4) { 
ixinbuf = 0; 
outbuf [0] = (inbuf[0] << 2) | ((inbuf[1] & 0x30) >> 4); 
outbuf [1] = ((inbuf[1] & 0x0F) << 4) | ((inbuf[2] & 0x3C) >> 2); 
outbuf [2] = ((inbuf[2] & 0x03) << 6) | (inbuf[3] & 0x3F); 

for(i = 0; i < ctcharsinbuf; i++) 
    [mutableData appendBytes:&outbuf[i] length:1]; 
} 

Et il y a d'autres message d'erreur: error

Désolé je suis un non vice et n'ont aucune idée de ces problèmes.
Pourriez-vous m'aider à résoudre le problème s'il vous plaît?
MERCI BEAUCOUP!

Modifier ------------
capture d'écran boucle logique:

suppression de lien ImageShack mort

Codes complets: https://github.com/bengottlieb/Twitter-OAuth-iPhone/blob/master/Twitter+OAuth/MGTwitterEngine/NSData+Base64.m

Merci toute suggestion!

+0

Cliquez sur le message et il vous montrera où la valeur des déchets provient. (Postez une capture d'écran si vous avez encore besoin d'aide.) – nschum

Répondre

22

par la contourner l'initialisation inbuf à un tableau vide char:

unsigned char inbuf[4] = {}; 
unsigned char outbuf[3]; 
2

Oh, très agréable. Ce que Clang vous dit ici, c'est que, dans certaines circonstances très spécifiques, vous pouvez ne jamais initialiser inbuf[1]. Je crois que cela pourrait se produire pour l'entrée qui avait l'air quelque chose comme:

a= 

Il y a un autre problème majeur étant signalé ici - les tailles de inbuf et outbuf sont permutés. Devrait être char inbuf[4], outbuf[3], et non l'inverse.

+0

Merci @duskwuff. J'ai changé la ligne 35 de 'unsigned char inbuf [3], outbuf [4];' à 'unsigned char inbuf [4], outbuf [3];' L'avertissement jaune a disparu (génial!). Mais les erreurs de logique sont toujours affichées. D'autres indices? – Jimi

0

Vous pouvez ajouter une instruction if pour faire en sorte que la inbuf[x] a une valeur en elle

if (sizeof(inbuf[1]) > 0x1) 
    outbuf [0] = (inbuf[0] > 4); 
if (sizeof(inbuf[2]) > 0x1) 
    outbuf [1] = ((inbuf[1] & 0x0F) > 2); 
if (sizeof(inbuf[3]) > 0x1) 
    outbuf [2] = ((inbuf[2] & 0x03)

Je ne suis pas sûr que si elle est « infaillible ».