c++ - 调试列表数组

标签 c++ visual-studio-2010 debugging

对于这样的代码:

std::list<int> a[3][3];

int myNumber = 0;

for(int i = 0; i < 3; i++)
{
    for(int j = 0; j < 3; j++)
    {
        a[i][j].push_back(myNumber);
        myNumber++;
    }
}

调试器的本地窗口显示:

enter image description here

没有简单的方法可以通过并看到:

列表 a[ 0 ][ 0 ] 包含 0

列表 a[ 0 ][ 1 ] 包含 1

列表 a[ 0 ][ 2 ] 包含 2

列表 a[ 1 ][ 0 ] 包含 3 等

我只能看到列表 [ 0 ][ 0 ]、[ 1 ][ 0 ] 和 [ 2 ][ 0 ] 包含的内容,但我想查看所有列表包含的内容。我如何在 Visual Studio 2010 中执行此操作?

最佳答案

“没有简单的方法可以查看列表 a[0][2] 包含 2”

你右击某处进入代码,选择Quick Watch,在那里写a[0][2]并通过添加 watch 将您放入“ watch 1”以便您可以看到您的list<int>a[0][2]

当您声明简单 list<int> l; 时, Visual Studio 正确显示它。您可以看到所有元素。

但是当你像这样声明列表数组时:

std::list<int> l[2];
l[1].push_back(3);
l[1].push_back(4);

然后变量l被认为是指向第一个 std::list<int> 的指针因此,即使您将元素插入索引 1 处的列表,Visual Studio 也只会向您显示 l是空列表:some address [0]() .我可以看到 l[1]仅当它在 watch 中时: enter image description here

可能的解决方案是用 [] 替换简单的 C 风格数组 ( std::vector ) :

std::vector<std::list<int> > l;
l.resize(2);

l[1].push_back(3);
l[1].push_back(4);

所以 l不被视为指向第一个 list 的指针了。自 lvector Visual Studio 正确显示所有元素:
enter image description here

关于c++ - 调试列表数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9343053/

相关文章:

c++ - 如何发送 EVP_PKEY 给对方?

c++ - C++类中的单元管理

c++ - 复制构造函数和函数返回临时值

c# - Visual Studio 调试速度慢得离谱

debugging - Wireshark、Firebug、Fiddler - 优缺点?

c++ - Visual Studio(或任何其他工具)能否将地址解释为调用堆栈的开始( boost 上下文)?

c# - D 的作用域失败/成功/退出是否必要?

c++ - GCC/LD找不到链接库

vb.net - 对于 Always On Top 选项,Visual Basic 代码是什么?

node.js - 在闭包内部使用 require 时无法在函数内部设置断点