循环与指针算术拒绝保持在C的边界内.给我segfault

Fre*_*red 0 c pointers

嗨已经做了这个功能,这是为了复制一个我无法通过的错误.它看起来像这样:

void enumerate(double *c, int size){
    while(c < &c[size]){
            printf("%lf\n", *c);
            c++;
    }
Run Code Online (Sandbox Code Playgroud)

}

我在那里添加了一些printf,它给了我:

Adressof c: 0x100100080, Adressof c + size: 0x1001000a8
Run Code Online (Sandbox Code Playgroud)

然后我还为循环的每次迭代打印c的地址,它达到0x1001000a8但是继续超过这一点,即使条件应该是假的,据我所知,直到我得到段错误.如果有人能发现问题,请告诉我,我一直在盯着这一段时间.

谢谢.

小智 5

您正在使用c循环条件两侧的当前值,并且c每次迭代都会增加. c永远不会达到自己的地址加上任何东西.

c[size]在您进入循环之前保存地址,您最终会到达它.

void enumerate(double *c, int size) {
    double *addr = &c[size];
    while(c < addr) {
            printf("%lf\n", *c);
            c++;
    }
}
Run Code Online (Sandbox Code Playgroud)