首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 矩陣賦值索引錯誤導致數據覆蓋分析

     編輯:程式設計疑難解答

問題現象

使用一維數組模擬二維矩陣存儲時,發現每行最後一個元素與下一行第一個元素相同,且數值異常增加 2。

錯誤代碼分析

// 錯誤的索引計算:a.row * i + j
a.pMat[a.row * i + j] = temp;

假設矩陣 3 行 4 列(row=3, col=4):

  • i=0 時:索引 0,1,2,3 → 正確存儲第 0 行。
  • i=1 時:索引 3,4,5,6 → 索引 3 被覆蓋,導致第 0 行最後一個元素與第 1 行第一個元素共用同一內存位置。

正確索引公式

一維數組模擬二維矩陣,正確索引為:i * col + j(按行主序)。

// 正確寫法
a.pMat[i * a.col + j] = temp;

其他函數同類錯誤

代碼中 生成矩陣B、顯示矩陣、矩陣相減 均存在相同索引錯誤,需統一修正。

修正後運行結果

修正索引後,矩陣生成、顯示、相減運算均正常,數據不再覆蓋錯亂。

核心教訓:二維轉一維索引務必使用 行號 * 列數 + 列號,切勿混淆行列變量。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved