C++程序爆掉了,不知道原因

我写了一个简单的程序,要实现以下效果:
随机生成一个地形
然后我的程序就成这个样子了:

img

根据我的经验,我认为这是内存调用错误
可是我检查了一遍,好像数组的引用都没有超出设置的值啊
不知道各位能不能给我这个初学者解决一下问题呢
语言:C++
代码放上:

#include <cstdio>
#include <stdlib.h>
const char block=3;
char map[1024][64];
char screen[64][16];
int change[16]={-3,-2,-2,-1,-1,-1,0,0,0,0,1,1,1,2,2,3};
void init(){
    int l,a;
    l=rand();
    l=l%65;
    for(int i=l;i>=0;i++) map[0][i]=block;
    for(int i=0;i<1024;i++){
        a=rand();
        a=a%16;
        a=change[a];
        l=l+a;
        for(int j=l;j>=0;j--) map[i][j]=block;
    }
    for(int i=0;i<64;i++){
        for(int j=0;j<16;j++) screen[i][j]=map[i][j];
    }
    return;
}
void show(){
    for(int i=0;i<64;i++){
        for(int j=0;j<16;j++) putchar(screen[i][j]);
    }
    return;
}
int main(){
    init();
    show();
    return 0;
}

char map[1024][64];长度是64
l=l%65; 怎么是65, 应该改成 l=l%64;

for(int i=l;i>=0;i--) map[0][i]=block; 倒序循环要i-- 不是i++

你要输出什么效果,你screen数组中的字符值都是block
block是3,是字符ascii编码,属于不可显示的字符.


#include <cstdio>
#include <stdlib.h>
const char block = 3;
char map[1024][64];
char screen[64][16];
int change[16] = { -3,-2,-2,-1,-1,-1,0,0,0,0,1,1,1,2,2,3 };
void init() {
    int l, a;
    l = rand();
    l = l % 64;//64
    for (int i = l; i >= 0; i--) map[0][i] = block;//i--
    for (int i = 0; i<1024; i++) {
        a = rand();
        a = a % 16;
        a = change[a];
        l = l + a;
        for (int j = l; j >= 0; j--) map[i][j] = block;
    }
    for (int i = 0; i<64; i++) {
        for (int j = 0; j<16; j++) screen[i][j] = map[i][j];
    }
    return;
}
void show() {
    for (int i = 0; i<64; i++) {
        for (int j = 0; j<16; j++) putchar(screen[i][j]);
    }
    return;
}
int main() {
    init();
    show();
    return 0;
}
#include <cstdio>
#include <stdlib.h>
const char block=3;
char map[1024][64];
char screen[64][16];
int change[16]={-3,-2,-2,-1,-1,-1,0,0,0,0,1,1,1,2,2,3};
void init(){
    int l,a;
    l=rand();
    l=l%64;
    for(int i=l;i>=0;i--) map[0][i]=block;
    for(int i=0;i<1024;i++){
        a=rand();
        a=a%16;
        a=change[a];
        l=l+a;
        for(int j=l;j>=0;j--) map[i][j]=block;
    }
    for(int i=0;i<64;i++){
        for(int j=0;j<16;j++) screen[i][j]=map[i][j];
    }
    return;
}
void show(){
    for(int i=0;i<64;i++){
        for(int j=0;j<16;j++) putchar(screen[i][j]);
    }
    return;
}
int main(){
    init();
    show();
    return 0;
}