我正在尝试执行涉及以下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的新手。
答案 0 :(得分:0)
我执行查看泄漏问题&#39; v&#39;。这让我怀疑你没有跟随上层的c风格作业。我们没有上层代码。
什么时候被释放?赋值是循环遍历所有值还是您正在进行c ++样式赋值?请记住,除了编译器内置的类型之外,c中的分配,赋值和释放不是免费的。