c语言 - 初始化的指针全是 0 而不是生成的值



我正在实现一个稀疏线性方程求解器,例如 Lx = b。为此,我初始化一个名为 x_ref 的参考 x 向量,并相应地生成一个 RHS 向量 b。但是,这两个指针似乎都是空的。

VALUE_TYPE是一个宏,设置为double

VALUE_TYPE *x_ref = (VALUE_TYPE *)malloc(sizeof(VALUE_TYPE) * n);
VALUE_TYPE *b = (VALUE_TYPE *)malloc(sizeof(VALUE_TYPE) * n);
for ( int i = 0; i < n; i++)
x_ref[i] = rand() % 10 + 1;
for (int i = 0; i < n; i++)
{
for (int j = cscColPtrTR[i]; j < cscColPtrTR[i+1]; j++)
{
int rowid = cscRowIdxTR[j]; //printf("rowid = %in", rowid);
b[rowid] += cscValTR[j] * x_ref[i];
}
}

在我将它们打印为之后;

for(int i = 0; i < n; i++)
{
printf("%dtt%dn", x_ref[i], b[i]);
}

结果是:

4226166 1977719296
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0
0       0

我不明白它有什么问题。

  1. 而是使用sizeof中的对象而不是类型VALUE_TYPE *x_ref = (VALUE_TYPE *)malloc(sizeof(*x_ref) * n);
  2. 使用正确的printf格式。%d用于输出整数,而不是双精度。
#define VALUE_TYPE double
int main(void)
{
size_t n = 20;
VALUE_TYPE *x_ref = malloc(sizeof(*x_ref) * n);
VALUE_TYPE *b = malloc(sizeof(*b) * n);
for ( int i = 0; i < n; i++)
x_ref[i] = rand() % 10 + 1;
for ( int i = 0; i < n; i++)
printf("%d - %fn", i, x_ref[i]);
}

https://godbolt.org/z/RKjZi8

首先,你不需要强制转换这些 malloc,因为它返回一个 void 指针,所以转换是隐式的。我不确定你为什么得到这些零,但有一些评论:

  • 您需要为伪随机数生成器设定种子:
#include <time.h>
#include <stdlib.h> 
#include <stdio.h> 
int main(void) 
{ 
// Use current time as seed for random generator 
srand(time(0)); 
for(int i = 0; i<4; i++) 
printf(" %d ", rand()); 
return 0; 
}
  • 用内存集初始化你的 b 向量,因为它们(据我所知(正在累积值,所以它们应该从 0 开始。就像现在一样,您的向量可能只包含胡言乱语。

由于未定义的引用,我无法运行您的代码,但请考虑更正这些要点:)

相关内容

  • 没有找到相关文章

最新更新