11 Stimmen

Logischer Fehler: Der linke Operand von '&' ist ein Garbage-Wert

Ich habe Twitter-OAuth-iPhone verwendet, um die Nachricht in meiner App zu synchronisieren. Es ist alles in Ordnung in iOS4.
Nach dem Upgrade auf iOS5 , Menü wählen Produkt' > 'Analysieren' und erhielt ein paar Verwarnungen.

Sur NSData+Base64.m , Es ist eine Warnung ' Der linke Operand von '&' ist ein Garbage-Wert ' enter image description here

Codes hier:

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

Und es gibt noch weitere Fehlermeldungen: error

Leider bin ich ein Anfänger und habe keine Ahnung von diesen Problemen.
Würden Sie mir bitte helfen, das Problem zu beheben?
Vielen DANK!

Bearbeiten------------
Screenshot der Logikschleife:

Entfernen des toten ImageShack-Links

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

Danke für jede Anregung!

22voto

user590305 Punkte 266

Umgehen, indem sie inbuf mit einem leeren char-Array initialisieren:

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

2voto

Oh, sehr schön.

Was Clang Ihnen hier mitteilt, ist, dass es unter bestimmten Umständen dazu kommen kann, dass Sie nie initialisieren inbuf[1] . Ich glaube, dies könnte bei Eingaben geschehen, die etwa so aussehen:

a=

Es gibt noch einen weiteren wichtigen Punkt, auf den hier hingewiesen wird - die Größen der inbuf y outbuf getauscht werden. Sollte sein char inbuf[4], outbuf[3] und nicht umgekehrt.

0voto

Angelo Punkte 533

Sie können eine if-Anweisung hinzufügen, um sicherzustellen, dass die inbuf[x] hat einen gewissen Wert in sich

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 ) 

Ich bin mir allerdings nicht sicher, ob es "narrensicher" ist.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X