我正在尝试创建一个二维数组,特别是有向图的邻接矩阵。 我以前从未尝试过这种动态内存分配,而且我遇到了麻烦。 这是代码:
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。感谢您发现。这么简单的错误......答案 0 :(得分:1)
您可能为$scope.gridOptions = {
enableSorting: true,
columnDefs: [
{ name: 'field1', enableSorting: false },
{ name: 'field2' },
{ name: 'field3', visible: false }
]
};
或x
输入了错误的值,其值应小于y
且大于或等于n
:
0
编辑#1:
根据用户的评论:M Oehm检查#include <stdlib.h>
#include <stdio.h>
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<m;i++)
{
scanf("%d %d", &x, &y);
if (x >=0 && y >= 0 && x < n && y < n) // here
array[x][y]=1;
else
printf("error in your values x=%d y=%d\n" , x , y);
}
return 0;
}
的返回值,请参阅:
scanf fails why?,我可以将代码重构为:
scanf