【发布时间】:2013-12-16 10:24:41
【问题描述】:
我写了一个函数,它应该为每个输入重新分配数组。我认为该函数运行良好,但是当我尝试使用数组时出现分段错误。
输入:
[1,2] [6,3] [2.5,3.5]
我必须检查用户输入的输入格式是否正确'[' number ',' number ']'。我必须至少有 2 个条目。输入的结尾不是新行,而是 EOF(CTRL+D 或 CTRL+Z)。
我的代码:
double ** allocation (double ** field, int i)
{
double x = 0, y = 0;
char obr[1], cbr[1], col[1];
while (scanf("%c%lf%c%lf%c", &obr, &x, &col, &y, &cbr) == 5)
{
if (col[0] != ',' || obr[0] != '[' || cbr[0] != ']')
return 0;
field = (double **) realloc(field, (i + 1) * sizeof(*field));
if (field == NULL)
return 0;
field[i] = (double *)malloc(2 * sizeof(double));
if (field[i] == 0)
return 0;
field[i][0] = x;
field[i][1] = y;
i++;
}
if (feof (stdin))
return 0;
return field;
}
当我想使用这个时:
double min = sqrtf(powf(field[0][0] - field[1][0], 2) + powf(field[0][1] - field[1][1], 2));
我会遇到分段错误。
【问题讨论】:
-
问题是你的
allocation函数返回值1而它应该返回一个指向double数组的指针吗? -
(另外)我猜问题是你修改了
field本地(通过使用realloc),当你离开函数时它的新值被丢弃. -
可能是
return 1;->return field; -
你们都说得对,但是我尝试在函数中做数学函数,同样的效果(分段错误),无论如何我会尝试修改它。
-
我之前添加了
field = (double **) malloc((i + 1) * sizeof(*field));,但还是不行,有人可以帮帮我吗?
标签: c malloc coordinates multidimensional-array realloc