gpt4 book ai didi

c - 将 malloc() 与二维数组一起使用,未得到预期结果

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

程序将另一个函数中的 malloc'd char * 放入 malloc'd 高 x 宽网格中。我忍不住认为是我填充网格的方式有问题。为了调试,我添加了正在进行的操作的打印。与紧随其后的相同循环相比,结果不同(代码之后的结果)。我不明白为什么我分配的内存看起来像之后就被改变了。

我看了这么久,现在脑子一片空白。

void fill_grid ( char **g, FILE *file_in, int *w, int *h )
{


char *temp_row;
for( int i = 0 ; i < *h ; ++i ){
(read_next(&temp_row, file_in));
for( int j = 0 ; j < *w ; ++j ){
(*g)[i * *h + j] = (temp_row)[j];
printf("%c", (*g)[i * *h + j]);
}
printf("\n");
}

printf("WHYYYY IS THIS :\n");
for( int i = 0 ; i < *h ; ++i ){
for( int j = 0 ; j < *w ; ++j ){
printf("%c", (*g)[i * *h + j]);
}
printf("\n");
}
free(temp_row);

在main()中

char *grid;
grid = malloc(sizeof(char)*grid_w*grid_h);
fill_grid( &grid, file_grid, &grid_w, &grid_h );

shell 中的结果,第一个“网格”与 .txt 文件中读取的完全相同,我认为第二个“网格”是我分配的内存的状态(分成两半,很奇怪):

123456789999
123456789999
111111111999
123456789999
222222222999
123456789999
WHYYYY:
123456123456
123456111111
111111123456
123456222222
222222123456
123456789999

我希望有人能够理解这一点并指出我明显错过的内容。谢谢。

编辑:多余的()

最佳答案

替换

(*g)[i * *h + j]

(*g)[i * *w + j]

你的二维数组(宽 x 高)的“步幅”为 w;也就是说,要转到下一行,您需要前进 w 个元素​​。

关于c - 将 malloc() 与二维数组一起使用,未得到预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21718203/

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