问题
I'm trying to create a 2d array, specifically an adjacency matrix for directed graphs. I've never tried this with dynamic memory allocation before and I've hit a snag. Here's the code:
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;
}
As soon as I finish entering all the edges, the program stops working and throws the usual "exe has stopped working".
Where's the problem?
EDIT: houssam spotted my error. The first "for" should have gone from 1 to n. When I entered 1 6 as an edge, the program crashed because there were only nodes 0-5. Thanks for spotting that. Such a simple mistake.....
回答1:
you may entered wrong values for x
or y
, their values should be less than n
and greater than or equal to 0
:
#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;
}
EDIT #1:
based on comment from user : M Oehm to check the return value of scanf
, see:
scanf fails why? , I can refactor the code to be like:
#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++)
{
//int num_read = scanf("%d %d", &x, &y);
if(scanf("%d %d", &x, &y) < 2)
{
printf("please enter valid two integers..\n");
while (getchar() != '\n'); // read all characters in the input stream.
}
else if (x >=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=%d y=%d\n" , x , y);
}
return 0;
}
来源:https://stackoverflow.com/questions/30197243/dynamically-allocated-2d-array