gpt4 book ai didi

c - 将值设置为用户定义大小的二维数组的元素

转载 作者:行者123 更新时间:2023-11-30 15:26:18 26 4
gpt4 key购买 nike

我尝试使用 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 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。

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

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

问题出在我对 printf() 的调用上。这里作为最后一个参数,我传递网格中第(i,j)个元素的地址,而不是值。因此,这些值已经正确初始化,但我正在打印指向它的指针的值。

最佳答案

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

与 calloc 不同,malloc 仅采用一个参数。我很惊讶代码竟然能编译。将其更改为

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

(没有任何理由将 malloc 的结果强制转换为 C 语言)

关于c - 将值设置为用户定义大小的二维数组的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27425465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com