m0_49901604 2022-04-12 10:19 采纳率: 100%
浏览 58
已结题

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;
}
因为数据量过大,使用了动态分配空间,但是在数据写入的时候一直出现数据写入异常访问。
实在是看不出来哪里出现问题了,谢谢您的帮助。

  • 写回答

5条回答 默认 最新

  • 关注

    再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;
            }
            
        }
    
    
    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 8月6日
  • 专家已采纳回答 7月29日
  • 修改了问题 4月12日
  • 创建了问题 4月12日