我希望使用一个结构体来包含一些数据,并在程序中的不同函数之间传递它们,这个结构体必须包含一个动态的二维数组(我需要一个矩阵),其维度根据程序参数而变化。
这是我的结构体:
struct mystruct {
int **my2darray;
}
我有一个从文件读取数字并将每个数字赋值给结构体数组中的单元格的函数。
我尝试这样做:
FILE *fp = fopen(filename, "r");
int rows;
int columns;
struct mystruct *result = malloc(sizeof(struct mystruct));
result->my2darray = malloc(sizeof(int)*rows);
int tmp[rows][columns];
for(int i = 0;i<rows;i++) {
for(int j = 0;j<columns;j++) {
fscanf(fp, "%d", &tmp[i][j]);
}
result->my2darray[i]=malloc(sizeof(int)*columns);
memcpy(result->my2darray[i],tmp[i],sizeof(tmp[i]));
}
但是这给我带来了奇怪的结果:除了第一行,所有行都被正确存储。(我确定问题不在扫描文件上)。如果我将代码的第四行更改为以下内容,则情况会有所改善:
result->my2darray = malloc(sizeof(int)*(rows+1));
它运行良好,现在我的问题是为什么会发生这种情况?
struct mystruct
应该包含行数和列数。 - Jabberwockystruct mystruct { size_t x,y; int my2darray[]; }
的结构体。 - chux - Reinstate Monica