C++ 为什么WMVIDEOINFOHEADER.rcSource导致指针无效

C++ 为什么WMVIDEOINFOHEADER.rcSource导致指针无效,c++,winapi,C++,Winapi,我不明白这是怎么回事:((WMVIDEOINFOHEADER*)&VideoMediaType->pbFormat)->rcSource=rc正在导致(WM_MEDIA_TYPE*)VideoMediaType变为invaid。当代码块的其余部分似乎没有问题时 WM_MEDIA_TYPE* VideoMediaType = NULL; VideoMediaType = (WM_MEDIA_TYPE*) new BYTE[MediaType]; Status = VideoMediaProps-

我不明白这是怎么回事:
((WMVIDEOINFOHEADER*)&VideoMediaType->pbFormat)->rcSource=rc正在导致(WM_MEDIA_TYPE*)VideoMediaType变为invaid。当代码块的其余部分似乎没有问题时

WM_MEDIA_TYPE* VideoMediaType = NULL;
VideoMediaType = (WM_MEDIA_TYPE*) new BYTE[MediaType];

Status = VideoMediaProps->GetMediaType(VideoMediaType, &MediaType);
RECT rc;
rc.left   = 0;
rc.top    = 0;
rc.right  = 640;
rc.bottom = 480;

((WMVIDEOINFOHEADER*)&VideoMediaType->pbFormat)->rcSource = rc; //<--Causing the issue.
((WMVIDEOINFOHEADER*)&VideoMediaType->pbFormat)->rcTarget = rc;
((WMVIDEOINFOHEADER*)&VideoMediaType->pbFormat)->dwBitRate = BitRate;
((WMVIDEOINFOHEADER*)&VideoMediaType->pbFormat)->AvgTimePerFrame = ( (LONGLONG) 10000000 ) / ( (LONGLONG) 30 );
((WMVIDEOINFOHEADER*)&VideoMediaType->pbFormat)->bmiHeader.biHeight = GetSystemMetrics(SM_CYSCREEN);
((WMVIDEOINFOHEADER*)&VideoMediaType->pbFormat)->bmiHeader.biWidth  = GetSystemMetrics(SM_CXSCREEN);
WM_MEDIA_TYPE*videomedia TYPE=NULL;
VideoMediaType=(WM_MEDIA_TYPE*)新字节[MediaType];
状态=VideoMediaProps->GetMediaType(VideoMediaType和MediaType);
RECT-rc;
rc.left=0;
rc.top=0;
rc.right=640;
rc.bottom=480;
((WMVIDEOINFOHEADER*)&VideoMediaType->pbFormat)->rcSource=rc//pbFormat)->rcTarget=rc;
((WMVIDEOINFOHEADER*)和VideoMediaType->pbFormat)->dwBitRate=比特率;
((WMVIDEOINFOHEADER*)和VideoMediaType->pbFormat)->AvgTimePerFrame=((LONGLONG)10000000)/((LONGLONG)30);
((WMVIDEOINFOHEADER*)和VideoMediaType->pbFormat)->bmiHeader.biHeight=GetSystemMetrics(SM_CYSCREEN);
((WMVIDEOINFOHEADER*)和VideoMediaType->pbFormat)->bmiHeader.biWidth=GetSystemMetrics(SM_CXSCREEN);

无论我把那一行放在哪里,一旦调试器在调试模式下到达那一行,“VideoMediaType”就无效了。如果我注释该行,指针将保持有效,程序将按预期执行。

状态值是什么,请澄清“变为无效”的含义。您的代码正在损坏堆。必须调用GetMediaType()两次。首先,将第一个参数设置为NULL,返回所需结构的大小。那么你就知道该分配多少了。@RomanR。Status只是一个“HRESULT”变量,我所说的无效是指visual studio喜欢称之为坏指针。@HansPassant我确实调用了GetMediaType()两次,得到了一个有效指针,我只是决定在上面的帖子中不显示那么多代码。
pbFormat
是指针,但是您正在解引用该指针的地址,而不是指针本身。