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

C++ vector 巢狀使用時常見錯誤與除錯技巧

     編輯:程式設計綜合問答

問題描述

在使用 std::vector 巢狀結構(如 vector<vector<CString>>)時,若未正確初始化內層向量,直接透過索引存取元素會導致程式崩潰(Access Violation)。

錯誤程式碼分析

class person {
public:
    CString name;
    std::vector<CString> vecfriends; // 內層向量預設為空
};
std::vector<person> vecperson;

// 新增 person 時,vecfriends 仍為空
void OnAdd() {
    person A;
    A.name = m_name;
    vecperson.push_back(A);
    i++;
}

// 直接用索引賦值,但 vecfriends[i] 不存在
void OnButton3() {
    vecperson[i].vecfriends[j] = m_friends; // 崩潰點
    j++;
}

正確做法

  1. 在 OnButton3 中,先確認 vecfriends 大小足夠,或使用 push_back 新增元素。
  2. 改為:vecperson[i].vecfriends.push_back(m_friends);
  3. 顯示時,檢查 i 是否在有效範圍,避免索引越界。

除錯建議

  • 設定中斷點,觀察 i、j 及向量大小。
  • 在迴圈前輸出 vecperson[i].vecfriends.size() 確認資料狀態。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved