the*_*ard 1 c arrays struct block memcmp
我正在使用memcmp()相同结构的两个变量进行比较(结构中有结合).变量在两个数组中,我正在运行一个循环,我在每次迭代中都这样做memcmp(&arr1[i], &arr2[i], sizeof(arrtype)).
调试时我发现memcmp返回-1,但是看两个变量及其值,我看到变量的值相等.这些数组在开始时使用memset归零.
memcmp返回-1而不是0?码:
typedef struct type1 {
    int version;
    union {
            option1_t opt1;
            option2_t opt2;
    } union_t;
} type1_t;
typedef struct type0 {
    type1_t member1;
    type2_t member2;
    type3_t member3;
    type4_t member4;
    type5_t member;
} type0_t;
type0_t arr1[SIZE];
type0_t arr2[SIZE];
memset(arr1, 0, SIZE * sizeof(type0_t));
memset(arr2, 0, SIZE * sizeof(type0_t));
/* doing irrelevant stuff... */
/* get values into arr1, arr2 ... */
/* comparing both arrays in for loop*/
value = memcmp(&arr1[i], &arr2[i], sizeof(type0_t));
您可能正在读取不确定的值(单位化内存或覆盖的内存以包含未指定的数据).
例如,您可能正在访问非最后一次成员的工会成员.即使不这样做,最后写入的成员可能小于联合的总范围,导致超出该大小的"不确定"数据.
struct X { 
    union {
         char field1;
         long long field2[10];
    };
};
struct X a,b;
a.field1 = 'a';
b.field1 = 'a';
你不能指望a和b比较相等,因为你从来没有初始化所有的位(field2有更多的位超过field1)
---取决于未初始化内存的值,也会调用未定义的行为.---对于C11不适用
| 归档时间: | 
 | 
| 查看次数: | 2136 次 | 
| 最近记录: |