我正在尝试使用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。
所以我要问的问题是你如何创建一个用户定义的大小数组,然后为每个元素分配一个值,而不知道用户将选择什么尺寸?
答案 0 :(得分:1)
grid[i] = (int*)malloc(side, sizeof(int));
malloc只接受一个参数,与calloc不同。我对代码编译完全感到惊讶。将其更改为
grid[i] = malloc(side * sizeof(int));
(从来没有任何理由在C中投射malloc的结果)