【问题标题】:Visual Studio doesn't show full array when when dynamically creating array of pointers动态创建指针数组时,Visual Studio 不显示完整数组
【发布时间】:2019-01-04 14:30:41
【问题描述】:

我的代码:

#include "pch.h"
#include <iostream>

using namespace std;

   int main()
   {
      char** pptr = new char*[5];

      for (int i = 0; i < 5; i++)
      pptr[i] = new char[5];
   }

我想要发生的是pptr 现在指向一个由 5 个指针组成的数组的开头,每个指针指向一个由 5 个字符组成的数组的开头。

我在main函数的最后放了一个断点,加上pptr观察,它只存储一个指针。为什么会发生这种情况,我该如何正确地做到这一点?

【问题讨论】:

  • 你说你想让pptr指向一个指针数组的beginning...数组的beginning确实是one 指针 - array 中的第一个 指针。其他指针稍后出现在同一个数组中。
  • 下次请把图片缩小到有趣的部分,不要有那么大的白边;-)

标签: c++ visual-studio pointers debugging


【解决方案1】:

这是 Visual Studio 中指针类型的默认知识。你在代码中指出char** pptr是一个指针,但它不知道有多大。

要解决此问题,您可以在 pptr[0] 上添加一个手表,然后您可以通过将其更改为 pptr[0],5 来指定它的“大小”为 5。此外,如果大小是可变的,您可以执行“ptr[0],[size]”,其中 size 是计算要显示的元素数量的表达式。

【讨论】:

  • 这是一个解决烦人问题的有趣方法,我以后会尝试。虽然我很惊讶,因为pptr[0],5 在 c++ 中具有独特的含义。当调试器以与语言相同的方式处理大多数运算符时,任意对某些运算符进行不同的解释似乎是不一致的。
  • 是的,, 特定于调试器监视变量。我不确定它是否可以使用逗号运算符作为表达式。可能会在某个地方触发一堆错误!
  • 是的很奇怪,是否不能像我建议的那样将要显示的元素类型更改为char*[5] 是c++? (我不使用 Visual Studio)
  • 不,它只显示 VS 理解的类型。但是,您也可以在表达式中始终使用reinterprect_cast(我认为)。
  • 是的,您应该能够取消引用指针并将其转换为对 5 char* 的数组的引用,我认为它写成 char*(&amp;)[5]。编辑:手表表达式(char*(&amp;)[5])(*pptr) 将给你pptr 作为5 个char* 的数组。编辑 2:虽然pptr,5 仍然是一种更好的方法。
【解决方案2】:

你的程序做你想做的事,但调试器不知道元素的数量,它只知道它是一个指针,所以它写了那个指针的包含。

我不知道你用的是什么调试器,但可能当你显示值时你可以通过 char*[5]` 修改 char** 以查看全部

【讨论】:

    【解决方案3】:
    // #include "pch.h"
    #include <iostream>
    
    using namespace std;
    
    int main(){
        char** pptr = new char*[5];
    
        for (int i = 0; i < 5; i++)
            pptr[i] = new char[5];
    
        for(int i=0;i<5;i++){
            char ch='A';
            pptr[0][i]=ch;
        }
    
        for(int i=0;i<5;i++){
            cout<<pptr[0][i]<<" ";
        }
    }
    

    现在,作为指针的 pptr[0] 指向一个字符数组。希望对您有所帮助。

    【讨论】:

    • 问题不在于代码,而在于调试器默认显示的内容
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2021-03-28
    • 1970-01-01
    相关资源
    最近更新 更多