从相同的内存地址读取不同的值

时间:2013-05-26 13:20:15

标签: c memory

我在C中实现了karatsuba的乘法算法,在调试时我发现了这个错误我无法解释: 在每一步中,我将数字分成两半,我通过为数据类型指定适当的指针来实现。当我输出我的值时,我得到了这个:

a->l: 8 a->u: 4 a->v: 0x51fc270 a: 4072
b->l: 8 b->u: 4 b->v: 0x51fc278 b: 6718

变成(for a)

a->l: 2 a->u: 2 a->v: 0x51fc272 a: 00
b->l: 2 b->u: 2 b->v: 0x51fc270 b: 00

和(对于b)

a->l: 2 a->u: 2 a->v: 0x51fc27a a: 00
b->l: 2 b->u: 2 b->v: 0x51fc278 b: 00

这两个输出之间没有写访问,前两个结构总是产生相同的输出 有人能解释一下这种行为吗?因为我真的迷路了......

保存数据的结构看起来像这样

struct mp_type
{
    int l, u; //length of v and places used (length of number stored)
    char* v; //array which stores the value (the number)
};
typedef struct mp_type mp_int;

最后一个值是存储在数组v中的数字。

// high has lower address as low order digits are stored at the end of the array
mp_int low1, low2, high1, high2;
high1.l = high1.u = a->u / 2;
low1.l = low1.u = a->u - high1.u;
low1.v = a->v + low1.u;
high1.v = a->v;
high2.l = high2.u = b->u / 2;
low2.l = low2.u = b->u - high2.u;
low2.v = (b->v + low2.u);
high2.v = b->v;

这就是我分割数字的方式。 a-> u和b-> u总是偶数。

在这里1你发现了一个较薄的项目版本,它会重现错误。

0 个答案:

没有答案