C语言动态分配二维数组后数据写入异常

//动态分配空间
int** money = (int**)malloc(n * sizeof(int*));
for (int i = 0; i < n; i++) {
money[i] = (int*)malloc(n * sizeof(int));
}
memset(money, 254, sizeof(money));
for (int i = m; i > 0; i--) {//输入所有数据
int x, y, w;
scanf("%d 空格 %d 空格%d", &x,&y,&w);
money[x - 1][y - 1] = w;//此处发生异常
money[y - 1][x - 1] = w;
}
因为数据量过大,使用了动态分配空间,但是在数据写入的时候一直出现数据写入异常访问。
实在是看不出来哪里出现问题了,谢谢您的帮助。

再scanf下面,最好判断一下输入的x和y是否再1-n之间,另外,memset是给以字符大小赋值的,你的memset可能达不到你想要的效果。
代码修改如下:

//动态分配空间
    int** money = (int**)malloc(n * sizeof(int*));
    for (int i = 0; i < n; i++) {
        money[i] = (int*)malloc(n * sizeof(int));
    }
    memset(money, 254, sizeof(money));
    for (int i = m; i > 0; i--) {//输入所有数据
        int x, y, w;
        scanf("%d %d %d", &x, &y, &w);
        if (x >= 1 && y <= n && y >= 1 && y <= n)
        {
            money[x - 1][y - 1] = w;//此处发生异常
            money[y - 1][x - 1] = w;
        }
        
    }

int** money = (int**)malloc(n * sizeof(int*));
for (int i = 0; i < n; i++) {
money[i] = (int*)malloc(n * sizeof(int));
}
memset(money, 254, sizeof(money));
for (int i = m; i > 0; i--) {//输入所有数据

==============
我觉得你的问题是,动态数组分配的是n * n大小,可你for循环却从i=m开始,这个m和n是什么关系呢?如果m大于n,程序自然就崩了

看不到图片呀

请粘贴代码,也利于别人抄写后调试,除非必须,请不要使用图片。

刚刚发现了解决办法,感觉这个问题对于新手应该是比较有价值的。动态分配数组之后内存并不连续,使用memset对于整块二维数组初始化时,是将从数组首地址开始的连续内存初始化,那么实际上你分配的指针将成为野指针。正确的应该是在循环时为a[i]初始化。