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

C++中float数组实现矩阵行交换问题排查求助

问题原因及修复方案

你的代码里有两个核心错误导致复制失败:

  • 指针偏移计算错误:
    m->m是float*类型,指针加法会自动以sizeof(float)为步长偏移。你额外乘sizeof(float)会导致偏移过度,指向完全错误的内存区域。正确的行起始地址计算应该是m->m + variable * N(目标行索引×每行元素数)。
  • memcpy参数传递错误:
    你传的&m_new_pt和&m_pt是指针变量本身的地址(float**类型),而非要复制的内存区域地址。memcpy需要的是源数据和目标数据的起始地址,直接传m_new_pt和m_pt即可。

修复后的代码:

for (int variable : partition) {
    float* m_pt = m->m + variable * N;
    float* m_new_pt = m_new->m + row * N;
    memcpy(m_new_pt, m_pt, N * sizeof(float));
}

额外验证点:确认row是目标矩阵的合法行索引,partition中的variable是源矩阵的合法行索引(范围0到N-1),避免越界访问内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:27:35