所以我试图获得一个数组的值,我设法找到了这样做的方法。当我单独使用该代码时,它运行良好,但是当我尝试将它集成到函数或宏中时,值会溢出,并且我会得到像4561033这样的东西。
这是我目前的代码:
__inline int sizeOfArray(BYTE lpArray[]) {
if(lpArray)
return (*(&lpArray + 1) - lpArray);
return 0;
}
我认为这就是所谓的“未定义的行为”,但我并不知道这意味着什么以及如何解决它。任何想法都会很受欢迎。
答案 0 :(得分:5)
你不能这样做。该函数不知道数组的长度,也无法找到它。
那算术不起作用。首先,BYTE*
实际上是template <typename T, size_t N>
size_t sizeOfArray(const T (&)[N])
{
return N;
}
。
要查找数组的大小:
BYTE array[42];
std::cout << sizeOfArray(array) << '\n'; // Output: 42
然后:
BYTE* ptr = new BYTE[42];
如果尝试将函数传递给指针,程序将无法编译。
因此,如果不是数组,则在指针后面有一个动态分配的内存块:
{{1}}
......首先,为什么?其次,在这种情况下,您必须自己跟踪这个大小。您可以将其存储到变量中。