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;
}

数据库:

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]?

环境:红帽Linux环境。

谢谢

4

1 回答 1

1

在 gdb 中,如何在第 10 行获得正确的 v1[0]?

您在函数v1中按值传递变量。testConst在第 10 行(return语句)中,此变量超出范围并因此被销毁。这就是为什么你不能可靠地打印v1.

可能您想像这样通过v1引用传递:

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

有了这个修改v1[0]应该打印好。

于 2013-07-03T10:24:40.763 回答