C中的复杂数据类型在算法中产生问题
我正在尝试执行一个涉及以下C函数的计算:C中的复杂数据类型在算法中产生问题,c,numbers,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 comple
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;
}
长双复数*tridiag_thomas(长双复数*a,长双复数*b,长双复数*c,长双复数*f,int N){
长双复数*v;v=(长双复数*)malloc(sizeof(长双复数)*N);
长双复数*y;y=(长双复数*)malloc(sizeof(长双复数)*N);
长双络合物w;
int k;
对于(k=0;k=0;k--){
y[k]=y[k]-v[k]*y[k+1];
}
返回y;
}
我通过这个函数(f)传递一个矩阵,找到y,用y修改f,然后再次通过这个函数传递新的f。我这样做大约1000次。当使用实际值时(并对long double complex->long double进行必要的更改),此函数按预期工作。然而,当以上述形式使用复杂参数时,结果会很快发散到无穷远
有人能告诉我为什么会这样吗?我对编程并不陌生,但我对C不熟悉。Ido看到一个问题,它正在泄漏“v”。这让我怀疑您没有遵循更高级别的c风格分配。我们没有上层代码
你什么时候被释放?赋值是否通过所有值循环,还是在执行C++样式分配?请记住,c语言中的分配、赋值和解除分配不是免费的,编译器内置的类型除外。计算论坛上也有同样的线程。由同一个用户。这个计算做什么?它解一个矩阵方程。对于给定的向量(f)和三对角矩阵(沿对角线和围绕对角线的元素由向量a、b、c定义),它求解向量y,使得矩阵乘以y为f。