初始化的指针全为0,而不是生成的值

问题描述 投票:0回答:2

我正在实现一个稀疏的线性方程求解器,例如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 = %i\n", rowid);
            b[rowid] += cscValTR[j] * x_ref[i];

        }
    }

将它们打印为;]之后>

for(int i = 0; i < n; i++)
{
    printf("%d\t\t%d\n", 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

我不明白这是怎么回事。

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

c pointers null malloc sparse-matrix
2个回答
0
投票
  1. 而不是在sizeof中使用对象,而不是类型VALUE_TYPE *x_ref = (VALUE_TYPE *)malloc(sizeof(*x_ref) * n);

-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.