Dynamically allocated 2d array

不羁的心 提交于 2019-12-24 17:17:16

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!