c/c++语言开发共享动态分配2d数组

我正在尝试创建一个二维数组,特别是有向图的邻接矩阵。 我以前从未尝试过这种动态内存分配,而且我遇到了麻烦。 这是代码:

int n, i; printf("Number of nodes is: "); scanf("%d", &n); int ** array = malloc(n * sizeof(int*)); for(i = 0; i < n; i++) array[i] = malloc(n * sizeof(int)); printf("Number of edges is: "); scanf("%d", &m); int x, y; for(i=0;i<m;i++) { scanf("%d %d", &x, &y); array[x][y]=1; } 

一旦我完成所有边缘,程序停止工作并抛出通常的“exe已经停止工作”。

问题出在哪里?

编辑:houssam发现了我的错误。 第一个“for”应该从1变为n。 当我输入1 6作为边缘时,程序崩溃,因为只有节点0-5。 感谢您发现。 这么简单的错误……

    您可能输入了错误的xy值,它们的值应小于n且大于或等于0

     #include  #include  int main() { int m ,n, i; printf("Number of nodes is: "); scanf("%d", &n); int ** array = malloc(n * sizeof(int*)); for(i = 0; i < n; i++) array[i] = malloc(n * sizeof(int)); printf("Number of edges is: "); scanf("%d", &m); int x, y; for(i=0;i=0 && y >= 0 && x < n && y < n) // here array[x][y]=1; else printf("error in your values x=%dy=%dn" , x , y); } return 0; } 

    编辑#1:
    根据用户的评论: M Oehm检查scanf的返回值,参见:
    scanf失败原因? ,我可以重构代码:

     #include  #include  int main() { int m ,n, i; printf("Number of nodes is: "); scanf("%d", &n); int ** array = malloc(n * sizeof(int*)); for(i = 0; i < n; i++) array[i] = malloc(n * sizeof(int)); printf("Number of edges is: "); scanf("%d", &m); int x, y; for(i=0;i=0 && y >= 0 && x < n && y < n) // here { array[x][y]=1; printf("array[%d][%d]=1;n" , x, y); } else printf("error in your values x=%dy=%dn" , x , y); } return 0; } 

      以上就是c/c++开发分享动态分配2d数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/523201.html

      (0)
      上一篇 2020年12月11日
      下一篇 2020年12月11日

      精彩推荐