将c中的两个整数数组进行比较奇数

时间:2014-10-19 07:40:08

标签: c arrays

这是我的代码的一部分,我读了一些内核数据结构的字段并将其与数组进行比较。但奇怪的是我看到当我打印数组orig_poolinfo的内容时,第一个元素是103但实际上是128.

int get_poolinfo_fields(vmi_instance_t vmi)
{
int orig_poolinfo[]={128,103,76,51,25,1,32,26,20,14,7,1};
uint64_t poolinfo_table_addr = 0xffffffff81ca4fc0;//kernel 3.11 
int poolinfo_table;
int i;

  //for( i=0;i<12;i++)
    //    printf("poolinfo_table=%d %d\n",i,orig_poolinfo[i]);
  for( i=0;i<12;i++)
     {
        vmi_read_64_va(vmi,poolinfo_table_addr, 0, &poolinfo_table);
        printf("poolinfo_table=%d orig_poolinfo[%d]=%d\n",poolinfo_table,i,orig_poolinfo[i]);
        if(poolinfo_table != orig_poolinfo[i])
           printf("hi\n");//return(1);
        poolinfo_table_addr = poolinfo_table_addr + 0x4;
     }
return(0);
}

这是输出:

poolinfo_table=128 orig_poolinfo[0]=103
hi
poolinfo_table=103 orig_poolinfo[1]=103
poolinfo_table=76 orig_poolinfo[2]=76
poolinfo_table=51 orig_poolinfo[3]=51
poolinfo_table=25 orig_poolinfo[4]=25
poolinfo_table=1 orig_poolinfo[5]=1
poolinfo_table=32 orig_poolinfo[6]=32
poolinfo_table=26 orig_poolinfo[7]=26
poolinfo_table=20 orig_poolinfo[8]=20
poolinfo_table=14 orig_poolinfo[9]=14
poolinfo_table=7 orig_poolinfo[10]=7
poolinfo_table=1 orig_poolinfo[11]=1

1 个答案:

答案 0 :(得分:2)

你正在混合两种不同的int和uint64_t。它们的尺寸可能不一样。

使用vmi_read_64_va()复制8个字节。如果系统上的sizeof(int)为4,则会出现未定义的行为。这意味着任何事情都可能发生,并且您的程序行为不正确。

使用适合您的文字大小的功能,不要混用类型。