run-time check failure #2 stack around variable

能输出正确结果可是弹出这个错误窗口是怎么回事?

#include<stdio.h>
#include<math.h>

int main(){
    int a[3];

    for (a[0] = 1; a[0] < 21; a[0]++)
    for (a[1] = 1; a[1] < a[0]; a[1]++)
    for (a[2] = 1; a[2] < a[1]; a[2]++)
    for (a[3] = 1; a[3] < a[2]; a[3]++)
    {
        if (abs(1.0 / a[0] + 1.0 / a[1] + 1.0 / a[2] + 1.0 / a[3] - 1) < 0.0001)
            printf("%d %d %d %d\n", a[0], a[1], a[2], a[3]);
    }

    return 0;
}

越界了吧,数组有索引超出范围了。