How to display a dynamically allocated array in th

2019-01-03 11:52发布

If you have a statically allocated array, the Visual Studio debugger can easily display all of the array elements. However, if you have an array allocated dynamically and pointed to by a pointer, it will only display the first element of the array when you click the + to expand it. Is there an easy way to tell the debugger, show me this data as an array of type Foo and size X?

9条回答
男人必须洒脱
2楼-- · 2019-01-03 12:42

For MFC arrays (CArray, CStringArray, ...) following the next link in its Tip #4

http://www.codeproject.com/Articles/469416/10-More-Visual-Studio-Debugging-Tips-for-Native-De

For example for "CArray pArray", add in the Watch windows

     pArray.m_pData,5 

to see the first 5 elements .

If pArray is a two dimensional CArray you can look at any of the elements of the second dimension using the next syntax:

     pArray.m_pData[x].m_pData,y
查看更多
冷血范
3楼-- · 2019-01-03 12:45

There are two methods to view data in an array m4x4:

float m4x4[16]={
    1.f,0.f,0.f,0.f,
    0.f,2.f,0.f,0.f,
    0.f,0.f,3.f,0.f,
    0.f,0.f,0.f,4.f
};

One way is with a Watch window (Debug/Windows/Watch). Add watch =

m4x4,16

This displays data in a list:

enter image description here

Another way is with a Memory window (Debug/Windows/Memory). Specify a memory start address =

m4x4

This displays data in a table, which is better for two and three dimensional matrices:

enter image description here

Right-click on the Memory window to determine how the binary data is visualized. Choices are limited to integers, floats and some text encodings.

查看更多
\"骚年 ilove
4楼-- · 2019-01-03 12:48

I haven't found a way to use this with a multidimensional array. But you can at least (if you know the index of your desired entry) add a watch to a specific value. Simply use the index-operator.

For an Array named current, which has an Array named Attribs inside, which has an Array named Attrib inside, it should look like this if you like to have to position 26:

((*((*current).Attribs)).Attrib)[26]

You can also use an offset

((*((*current).Attribs)).Attrib)+25

will show ne "next" 25 elements. (I'm using VS2008, this shows only 25 elements maximum).

查看更多
登录 后发表回答