程序将另一个函数的malloc'd char *转换为malloc'd heigth x width网格。我不禁想到这就是我填补网格错误的方式。为了调试我添加了正在进行的操作的打印。在与其后面的相同循环进行比较时,结果是不同的(代码之后的结果)。我不明白为什么我分配的内存看起来像是在它之后被改变了。
我已经看了这么久,现在我的脑子一片空白。
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
我希望有人能理解这一点,并指出我显然错过了什么。 感谢。
编辑:多余的()
答案 0 :(得分:1)
替换
(*g)[i * *h + j]
与
(*g)[i * *w + j]
你的2d阵列(w宽h高)有一个“stride”w;也就是说,要转到下一行,您需要使用正好的w元素前进。