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



我正在尝试使用 malloc(( 函数创建一个方形网格(二维数组(,数组中每个元素的值为 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 filen");
        return(EXIT_FAILURE);
    }
    printf("Enter the size of each side of the square gridn");
    scanf("%d", &side);                                             
    printf("side = %dn", 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, "%dt%dt%dn", i, j, &grid[i][j]);                                 
        printf("co-ordinates of %dt%dt%d written to filen", i, j, &grid[i][j]);
        }
    }
    return 0;
}

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

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

更新 5 年后:我非常怀疑,但万一有人遇到这个问题并想知道答案。

问题在于我对 printf(( 的调用。作为最后一个参数,我传递网格中第 (i, j( 个元素的地址,而不是值。所以这些值本来可以正确初始化,但我正在打印指向它的指针的值。

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

Malloc 只接受一个参数,不像 calloc。我很惊讶代码竟然可以编译。将其更改为

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

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

相关内容

  • 没有找到相关文章

最新更新