如果不用malloc申请二维数组不会出错,用了以后会显示写入位置时发生访问冲突

img

img

#include
int top = 4;
int** map;
void mapTake()
{
    FILE* fp = fopen("map.txt", "r");
    fread(map, sizeof(map[0][0]), sizeof(map), fp);
    fclose(fp);
  
}
void mapStorage()
{
    FILE* fp = fopen("map.txt", "w");
    fwrite(map, sizeof(map[0][0]), sizeof(map), fp);
    fclose(fp);

}
int main()
{
    
     map= (int**)malloc(top * sizeof(int*));
    for (int m = 0; m < top; ++m)
    {
        map[m] = (int*)malloc(top * sizeof(int));
    }

    mapStorage();
    int count = 0;
    for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            map[i][j] = count;
            count++;
        }
    }
    mapTake();
    for (int i = 0; i < 4; ++i)
    {
        for (int j = 0; j < 4; ++j)
        {
            printf("%d", map[i][j]);
        }
    }
    free(map);
    for (int n = 0; n < top; ++n)
    {
        free(map[n]);
    }
    return 0;
}


你这申请