我正在尝试使用 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 的结果(