C中复杂数据类型算法产生的问题

时间:2014-11-25 01:41:22

标签: c numbers

我正在尝试执行涉及以下C函数的计算:

long double complex* tridiag_thomas(long double complex *a, long double complex *b, long double complex *c, long double complex *f, int N) {

    long double complex *v; v = (long double complex *)malloc(sizeof(long double complex) * N);
    long double complex *y; y = (long double complex *)malloc(sizeof(long double complex) * N);

    long double complex w;

    int k;

    for (k = 0; k < N; k++) {
        y[k] = 0;
        v[k] = 0;
    }
    w = a[0];
    y[0] = f[0] / w;
    for (k = 1; k < N; k++) {
        v[k - 1] = c[k - 1] / w;
        w = a[k] - b[k] * v[k - 1];
        y[k] = (f[k] - b[k] * y[k - 1]) / w;
    }
    for (k = N - 2; k >= 0; k--) {
        y[k] = y[k] - v[k] * y[k + 1];
    }
    return y;
}

我通过这个函数(f)传递矩阵,找到y,用y修改f,然后再次通过函数传递新的f。我这样做的次数是1000次。使用实际值(并对long double complex进行必要的更改 - > long double)时,此函数按预期工作。然而,当在具有复杂参数的上述形式中使用它时,结果很快就会发散到无穷大。

有人可以告诉我为什么会这样吗?我不是编程的新手,但我是C的新手。

1 个答案:

答案 0 :(得分:0)

执行查看泄漏问题&#39; v&#39;。这让我怀疑你没有跟随上层的c风格作业。我们没有上层代码。

什么时候被释放?赋值是循环遍历所有值还是您正在进行c ++样式赋值?请记住,除了编译器内置的类型之外,c中的分配,赋值和释放不是免费的。