C++读取二进制文件有关问题

求助C++读取二进制文件问题
        一个二进制文件.dat,里面有28个网格形式的数据(3600 X 1800),第2500-3150列、1000-1450行的数据有值,其余位置数值为0,如何读取第18-22个网格数据且按照原来的网格形式存储为文本,有代码和解释最佳,自己写的代码编译没问题可是运行不了,显示Stack overflow。。。
        在此谢过了!
------解决方案--------------------
没实际编译链接调试,仅供参考:
//二进制文件.dat,里面有28个网格形式的数据(7*450==3150 X 1800==4*450),
//第2500-3150列、1000-1450行的数据有值,
//其余位置数值为0,
//如何读取第18-22个网格数据且按照原来的网格形式存储为文本
#include <stdio.h>
#include <string.h>
#define RN 4
#define CN 7
#define RW 450
#define CW 450
FILE *f;
FILE *ft;
typedef unsigned char DT;
DT rd[CN*CW];
DT d;
int r,c,R,C,N;
int main() {
    f=fopen("bin.dat","wb");

    memset(rd,0,CN*CW*sizeof(DT));
    for (r=     0;r<1000-1;r++) fwrite(rd,sizeof(DT),CN*CW,f);

    memset(rd+2500*sizeof(DT),1,(3150-2500)*sizeof(DT));
    for (r=1000-1;r<1450-1;r++) fwrite(rd,sizeof(DT),CN*CW,f);

    memset(rd,0,CN*CW*sizeof(DT));
    for (r=1450-1;r<1800  ;r++) fwrite(rd,sizeof(DT),CN*CW,f);

    fclose(f);

    f=fopen("bin.dat","rb");
    ft=fopen("dat.txt","w");
    for (r=0;r<RN*RW;r++) {
        for (c=0;c<CN*CW;c++) {
            R=r/RW;
            C=c/CW;
            N=R*CN+C;
            if (18-1<=N && N<=22-1) {
                fseek(f,(r*CN*CW+c)*sizeof(DT),SEEK_SET);
                fread(&d,sizeof(DT),1,f);
                fprintf(ft,"%d,",d);
            } else fprintf(ft,"0,");
        }
        fprintf(ft,"\n");
    }
    fclose(ft);
    fclose(f);
}