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
相关产品推荐
相关产品推荐

