【问题标题】:Logic Error: The left operand of '&' is a garbage value逻辑错误:“&”的左操作数是垃圾值
【发布时间】:2011-10-20 15:29:37
【问题描述】:

我使用 Twitter-OAuth-iPhone 在我的应用程序中同步消息。在 iOS4 中一切正常。
升级到iOS5后,选择菜单'Product' > 'Analyze',出现了一些警告。

NSData+Base64.m中,警告''&'的左操作数是垃圾值'

代码在这里:

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

还有其他错误信息:

对不起,我是新手,对这些问题一无所知。
请帮我修一下好吗?
非常感谢!

编辑------------
逻辑循环截图:

删除无效的 ImageShack 链接

完整代码:https://github.com/bengottlieb/Twitter-OAuth-iPhone/blob/master/Twitter+OAuth/MGTwitterEngine/NSData+Base64.m

感谢任何建议!

【问题讨论】:

  • 点击消息,它会告诉你垃圾值的来源。 (如果您仍然需要帮助,请发布屏幕截图。)

标签: iphone ios5 mgtwitterengine


【解决方案1】:

通过将 inbuf 初始化为一个空的 char 数组来避开它:

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

【讨论】:

    【解决方案2】:

    哦,非常很好。

    Clang 在这里告诉您的是,在某些非常特殊的情况下,您最终可能永远不会初始化 inbuf[1]。我相信这可能会发生在类似于以下内容的输入中:

    a=
    

    这里指出了另一个主要问题——inbufoutbuf 的大小被交换了。应该是char inbuf[4], outbuf[3],反之则不然。

    【讨论】:

    • 谢谢@duskwuff。我已将第 35 行从 'unsigned char inbuf[3], outbuf[4];'到'unsigned char inbuf[4], outbuf[3];'。黄色警告消失了(太棒了!)。但仍然显示逻辑错误。还有更多提示吗?
    【解决方案3】:

    您可以添加一个 if 语句以确保 inbuf[x] 具有一定的价值

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

    我不确定它是否“万无一失”。

    【讨论】:

      猜你喜欢
      • 2022-06-14
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-06
      • 2011-12-20
      相关资源
      最近更新 更多