【问题标题】:What does this mean? void* free_me = 0;这是什么意思?无效* free_me = 0;
【发布时间】:2012-03-15 08:45:45
【问题描述】:
uint8_t* baseAddress = CVPixelBufferGetBaseAddress(imageBuffer); 
    void* free_me = 0;
    if (true) { // iOS bug?
        uint8_t* tmp = baseAddress;
        int bytes = bytesPerRow*height;
        free_me = baseAddress = (uint8_t*)malloc(bytes);
        baseAddress[0] = 0xdb;
        memcpy(baseAddress,tmp,bytes);
    }

这个程序是在zxing包里找到的,这句“void* free_me = 0;”是什么意思意思是?这个程序有什么作用?任何提示将不胜感激。

【问题讨论】:

    标签: ios void


    【解决方案1】:

    void* free_me = 0 声明了一个“通用”指针free_me 并为其赋值0

    可以使用通用指针,几乎与任何其他指针(int*char* 等)一样,但指向 void 的指针实际上可以指向任何数据类型。

    【讨论】:

      【解决方案2】:

      这段代码非常晦涩难懂,正如评论所说,它可以解决 iOS 中一个晦涩的错误。在某些设备上的早期版本的 AV Foundation Framework 中,缓冲发生了非常奇怪的事情。此代码复制缓冲区而不是直接使用它。 if (true) 的东西在那里,因此我们可以(最终)为不需要解决方法的设备/SDK 禁用此路径。

      【讨论】:

      • 为什么第一个字节被0xdb覆盖了?
      • 我一定是在调试时把它卡在那里,试图弄清楚发生了什么。 0xdb 是我的 8 位调试值,0xdeadbeef 的简写,我的 32 位调试值。它应该被下面的 memcpy 闪电战,但是在代码的某些化身中(我猜是在 memcpy 之前)我不确定复制是否正确发生,所以我在那里写了 0xdb 并检查它不是 0xdb 之后。希望不久我能有机会把它清理干净……
      猜你喜欢
      • 2011-08-23
      • 1970-01-01
      • 2018-01-15
      • 2015-03-20
      • 2020-01-07
      • 2018-09-10
      • 2012-04-20
      • 1970-01-01
      • 2017-05-09
      相关资源
      最近更新 更多