我正在使用IMidiQueue将IMidiMsg
个对象排队/添加到IMidiQueue mMIDICreated;
在某些时候,我想检索我在其上添加的项目数量。我试过这个:
char buffer[50];
sprintf(buffer, "size %d\n", sizeof(mMIDICreated) / sizeof(IMidiMsg));
OutputDebugString(buffer);
但添加了8项后:
for (int i = 0; i < 4; i++) {
IMidiMsg* one = new IMidiMsg;
// ...
mMIDICreated.Add(one);
IMidiMsg* two = new IMidiMsg;
// ...
mMIDICreated.Add(two);
}
它返回2,而不是8.我在哪里错了?
答案 0 :(得分:3)
答案 1 :(得分:2)
假设mMIDICreated
是指针,对指针执行sizeof
会返回实际指针的大小,而不是它指向的大小。另请注意,将数组传递给函数时,将衰减到指向其第一个元素的指针。
如果函数需要数组中的元素数,则需要将其作为参数传递给函数。
另一种解决方案,我建议使用普通数组/指针的方法是使用std::array
(对于编译时已知的数组)和std::vector
进行&#34;运行-time&#34;或动态数组。
答案 2 :(得分:1)
查看您的链接:
class IMidiQueue
{
...
IMidiMsg* mBuf;
}
存储元素的缓冲区不会被sizeof()
返回。只有指针本身的大小。
但是,还有一种方法int GetSize()
对您有用。