将值设置为用户定义大小的2D数组的元素

时间:2014-12-11 14:43:16

标签: c malloc user-input multidimensional-array dynamic-arrays

我正在尝试使用malloc()函数创建一个方形网格(2D数组),其中数组中每个元素的值为0。

数组的大小必须由用户指定,然后将每个元素设置为零。

然后我尝试将网格的元素写入文件并打印它们,但即使我已经尝试确保它们都是0,它们也会被打印为大数字。

这是我写的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

main()
{
    int     side, part_max, side_mid;
    int     i, j;
    int     **grid;

    FILE    *outmid;

    outmid = fopen("test.out", "w");
    if(outmid == (FILE*) NULL)
    {
        printf("Can't open outmid file\n");
        return(EXIT_FAILURE);
    }

    printf("Enter the size of each side of the square grid\n");
    scanf("%d", &side);                                             
    printf("side = %d\n", side);

    grid = (int**)malloc(side*sizeof(int*));                    
    if(grid == NULL)
    {
        printf("Memory allocation failed");
        return(EXIT_FAILURE);
    }
    for(i=0; i<side; i++)
    {
        grid[i] = (int*)malloc(side*sizeof(int));
        if(grid[i] == NULL)
        {
        printf("Memory allocation failed");
        return(EXIT_FAILURE);
        }       
    }

    for(i=0; i<side; i++) /*ensures grid is filled with zeros*/
    {
        for(j=0; j<side; j++)   
        {
        grid[i][j] = 0;
        fprintf(outmid, "%d\t%d\t%d\n", i, j, &grid[i][j]);                                 
        printf("co-ordinates of %d\t%d\t%d written to file\n", i, j, &grid[i][j]);
        }
    }

    return 0;
}

代码编译并运行,但我遇到的唯一问题是我无法将元素的值赋值为0。

所以我要问的问题是你如何创建一个用户定义的大小数组,然后为每个元素分配一个值,而不知道用户将选择什么尺寸?

1 个答案:

答案 0 :(得分:1)

grid[i] = (int*)malloc(side, sizeof(int));

malloc只接受一个参数,与calloc不同。我对代码编译完全感到惊讶。将其更改为

grid[i] = malloc(side * sizeof(int));

(从来没有任何理由在C中投射malloc的结果)