我有两个指针数组。进入循环
时,我需要对它们进行简单的算术运算 float **x_points, **y_points;
x_points = malloc(sizeof(float*) * n);
y_points = malloc(sizeof(float*) * n);
for( i = 0; i < n; i++) {
printf("x");
printf("%i",i);
printf(" : ");
x_points[i] = malloc( n * sizeof ( float ) );
scanf("%f",x_points[i]);
printf("y");
printf("%i",i);
printf(" : ");
y_points[i] = malloc( n * sizeof ( float ) );
scanf("%f",y_points[i]);
}
x_points[n] = NULL;
y_points[n] = NULL;
这里我有问题:
int k;
for(k=0; k < i; k++) {
R += *x_points[k] * *y_points[k+1] - *x_points[k+1] * *y_points[k];
}
难道你不能告诉我为什么这段代码告诉我一个窗口说系统有信号,这就是为什么停止程序?谢谢你,我会很感激的!
答案 0 :(得分:1)
你正在分配n个指针:
x_points = malloc(sizeof(float*) * n);
y_points = malloc(sizeof(float*) * n);
但是在这里你要访问已经分配的内存:
x_points[n] = NULL;
y_points[n] = NULL;
由于C
的{{1}}为0-based
,因此您只能从indices
转到0
。
因此,您需要分配n-1
,或将n+1
放在null
编辑:也是hmjd所说的。我没有抓住它。
答案 1 :(得分:0)
原因可能是您正在访问未分配的内存位置 改变
for(k=0; k < i; k++)
到
for(k=0; k < i - 1; k++)
答案 2 :(得分:0)
x_points[n] = NULL;
y_points[n] = NULL;
在分配给分配给它的内存之外的值时也无效。
如果想要实现这个,请稍微更改malloc调用 malloc( n+1 * sizeof ( float ) )