PARSEC x264基准中的奇怪行为

问题描述 投票:0回答:1

我正在运行PARSEC x264基准,它运行得很好,直到关闭时才崩溃。不幸的是,该套件似乎无人维护或维护率较低--这个问题(崩溃,而非具体细节)近一年前就在邮件列表上发布过,但没有回复。

我已经将问题隔离到一个特定函数的一部分(见下文),用printf进行了老式调试。

void x264_cqm_delete( x264_t *h )
{
     int i, j;
     printf("IN BAD CODE\n");
     for( i = 0; i < 6; i++ )
     {
         for( j = 0; j < i; j++ )
             if( h->quant4_mf[i] == h->quant4_mf[j] )
                 break;
         if( j == i )
         {
            printf("DELETE CODE with i = %i and j = %i\n", i, j);
            x264_free( h->  quant4_mf[i] );
            x264_free( h->dequant4_mf[i] );
            x264_free( h->unquant4_mf[i] );
        }
        for( j = 0; j < i; j++ )
            if( h->quant4_bias[i] == h->quant4_bias[j] )
                break;
        if( j == i )
            x264_free( h->quant4_bias[i] );
}

}

这就产生了输出...

IN BAD CODE
DELETE CODE with i = 0 and j = 0
DELETE CODE with i = 4 and j = 4
DELETE CODE with i = 5 and j = 4

到底是怎么回事?

c if-statement parsec
1个回答
0
投票

从检查x264库本身的规范代码来看,似乎很明显是代码坏了,我看到这些问题的原因是代码在糟蹋堆。

其实外循环的极限应该是4--它应该与各种数组名称中使用的数字相匹配--这是x264库本身使用的模式--而quant4_mf数组的第一维只有4个元素。以这种方式修补代码,可以看到编译后的二进制运行没有问题。

© www.soinside.com 2019 - 2024. All rights reserved.