我有这个循环,给出了seg.故障.
s->c = malloc(width * height * sizeof(double));
if (s->c == NULL) { puts("malloc failed"); exit(1); }
for (int n = 0; n < width; n++) {
for (int m = 0; m < height; m++) {
d = (&s->c)[m][n];
printf("d %f\n", d);
printf("m %i\n", m);
printf("n %i\n", n);
}
}
Run Code Online (Sandbox Code Playgroud)
里面的s-> c是:
double* c;
Run Code Online (Sandbox Code Playgroud)
执行时只输出:
d 27.000000
m 0
n 0
Run Code Online (Sandbox Code Playgroud)
然后是seg.故障.
当我将s-> c视为一维数组时,它有效,但我真的希望将其视为二维数组.
当c指针在结构中时,这可能吗?
如果是这样,(&s->c)[m][n]那么访问元素的正确方法是什么?
桑德拉
问题是编译器不知道矩阵的维数.
当你有:double tab[m][n]可以访问元素tab[row][col]作为*(tab + (row * n) + col)
在您的情况下,您只能将double *tab;其视为指向元素的指针,tab[0][0]而没有关于矩阵维度的信息,并且编译器无法计算正确的地址.
您可以自己计算地址(例如使用宏),但会丢失漂亮的tab[x][y]语法.
我很惊讶它编译.您应该至少收到一条关于隐式地向指针投射双精度的警告.
| 归档时间: |
|
| 查看次数: |
877 次 |
| 最近记录: |