#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:
b main.cpp:21
run
p *(v1._M_impl._M_start)
b main.cpp:10
c
p *(v1._M_impl._M_start)
在第21行,我可以得到正确的v1 [0],即“abc”; 在第10行,我无法得到正确的v1 [0];
问题:在gdb中,如何在第10行得到正确的v1 [0]?
环境:Red Hat Linux环境。
感谢
答案 0 :(得分:1)
在gdb中,怎样才能在第10行得到正确的v1 [0]?
您在v1
函数中按值传递testConst
变量。
在第10行(return
语句)中,此变量超出范围,因此被销毁。这就是为什么你无法可靠地打印v1
的值。
您可能希望通过引用传递v1
,如下所示:
void testConst(std::vector<std::string>& v1)
通过此修改,v1[0]
应该打印好。