我正在尝试创建一个二维数组,特别是有向图的邻接矩阵。 我以前从未尝试过这种动态内存分配,而且我遇到了麻烦。 这是代码:
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。 感谢您发现。 这么简单的错误……
您可能输入了错误的x
或y
值,它们的值应小于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