程序将另一个函数的malloc'd char *放入malloc'd heigth x width grid中。我不禁认为这是我填充网格的方式出了问题。为了调试,我添加了正在进行的操作的打印。当与紧随其后的同一循环进行比较时,结果是不同的(代码之后的结果)。我不明白为什么我分配的内存看起来像是被更改了。
我看了这么久,现在我的脑子一片空白。
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);
在主()
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]
你的 2d 数组(宽 w x h 高)的"步幅"为 w;也就是说,要进入下一行,你需要前进正好 w 个元素。