2013-07-02 24 views
0
#include <iostream> 
#include <stdio.h> 
#include <vector> 
#include <string> 

void testConst(std::vector<std::string> v1) 
{ 
    std::string& a = v1[0]; 
    std::cout << a << "\n"; 
    return; 
} 

int main() 
{ 
    std::string x1 = "abc"; 
    std::string x2 = "def"; 
    std::vector<std::string> v1; 
    v1.push_back(x1); 
    v1.push_back(x2); 

    testConst(v1); 

    return 0; 
} 

GDB:調試C++用gdb:如何檢查的std ::矢量的值 - 在函數傳遞

b main.cpp:21 
run 
p *(v1._M_impl._M_start) 
b main.cpp:10 
c 
p *(v1._M_impl._M_start) 

在線路21,I可以得到正確的V1 [0],這是「ABC」; 在第10行,我無法得到正確的v1 [0];

問題:在gdb中,如何在第10行中獲得正確的v1 [0]?

環境:Red Hat Linux環境。

感謝

回答

1

GDB中,怎樣才能得到正確的V1 [0] 10號線?

您在testConst函數傳遞v1變量的值。 在第10行(return語句)中,此變量超出了範圍,因此被破壞。這就是爲什麼你不能可靠地打印v1的值。

也許你想通過引用傳遞v1這樣的:

void testConst(std::vector<std::string>& v1) 

經過這樣的修改v1[0]應打印好。