循环遍历指针数组的算法

时间:2014-03-05 11:51:53

标签: c arrays pointers

我有两个指针数组。进入循环

时,我需要对它们进行简单的算术运算
 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];
}

难道你不能告诉我为什么这段代码告诉我一个窗口说系统有信号,这就是为什么停止程序?谢谢你,我会很感激的!

3 个答案:

答案 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 ) )