>我有一个cholmod_dense的数据结构:
cholmod_dense* ex = cholmod_l_solve(CHOLMOD_A, L, B, &com);
我想提取值并将它们复制到另一个变量。这意味着我需要索引到双精度数组中并复制值。
for (int k=0; k<ncols; k++) T_x[k]=((double*)ex->x)[k];
编译器可以接受,但我得到了一个隔离错误。或者我认为我应该能够做到:
double* e_x =(double*)ex->x;
for (int k=0; k<ncols; k++) T_x[k]=*e_x[k];
但是编译器真的不喜欢这个:
error: invalid type argument of unary ‘*’ (have ‘double’)
for (int k=0; k<ncols; k++) T_x[k]= *e_x[k];
根据CHOLMOD用户指南:
- cholmod dense:按列主顺序排列的密集矩阵,可以是实矩阵、复矩阵还是僵尸矩阵。这与 C 中使用的行主约定不同。密集矩阵 X 包含 • X->x,大小为 X->nzmax 的双数组,对于复杂情况,则为该数组的两倍。• X->z,如果 X 是僵尸,则大小为 X->nzmax 的双精度数组。
所以我应该能够简单地抓取 ex->x 并将其索引为双数组,但我不能这样做而不会出现分段错误。谁能帮我?
CHOLMOD库是用C编写的,链接到CHOLMOD库的代码(上面显示的代码片段(是c ++。
好的,看起来我犯了几个错误。
首先,我遇到了分段错误,因为我使用的是假设long integers
cholmod_l_zeros();
。相反,我应该使用cholmod_zeros();
因为我正在使用doubles
.
修复此问题后,我在cholmod_solve(CHOLMOD_A, L, B, &com);
语句之后立即遇到了错误CHOLMOD error: invalid xtype
。这是因为我的cholmod_factor* L
被定义在范围之外。修复这两个问题后,代码成功地将值从cholmod_dense ex->x double array
复制到我的T_x double vector
:
cholmod_dense* ex = cholmod_solve(CHOLMOD_A, L, B, &com);
double* e_x = (double*)ex->x;
for (int k=0; k<ncols; k++) T_x[k] = e_x[k];
我也不知道[]
运算符会自动取消引用指针。很高兴知道!