You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++调用BLAS ZHEMV函数时奇数维度触发Valgrind非法读警告

调用BLAS ZHEMV函数时奇数维度矩阵触发Valgrind无效读警告的问题

在C++中调用BLAS的ZHEMV函数实现厄米(自伴随)矩阵与复向量的乘法运算时,遇到如下问题:仅当矩阵维度为奇数时,Valgrind会抛出「Invalid read of size 8」警告。

触发警告的代码

#include <iostream>
#include <vector>
#include <complex>
#include <cmath>
#include <cstdlib>
#include <cassert>

typedef std::complex<double> Complex;
typedef std::vector<Complex> cvector;

extern "C"
{
    int zhemv_(const char &uplo, int *n, Complex *alpha, Complex *v, int *lda, Complex *x, int *incx, Complex *beta, Complex *w, int *incy);
}

int main()
{
    int Dim;
    int ld = 1;
    Complex unit(1,0);
    Complex zero(0,0);

    std::cout<<"Read dimension:"<<std::endl;
    std::cin>>Dim ;

    std::vector<Complex> vec1(Dim,1);
    std::vector<Complex> vec2(Dim,2);
    std::vector<Complex> Ham(Dim*Dim,1.5);

    zhemv_('U',&Dim,&unit,&Ham[0],&Dim,&vec1[0],&ld,&zero,&vec2[0],&ld);
}

Valgrind警告信息

363614 Invalid read of size 8
363614 at 0x65316CF: zhemv_U_HASWELL (in /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.20.so)

已尝试调整n、lda、incx、incy等参数传递方式,查阅BLAS文档也未找到有效解决方法。该代码是从大型项目中提取的最小复现示例,此问题可能是大型程序出现段错误的原因。

内容的提问来源于stack exchange,提问作者Dimorga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 21:43:18