尝试获取数组大小时的未定义行为

Its*_*gh1 -1 c++ arrays undefined-behavior

所以我试图获得数组的价值,我设法找到了这样做的方法.当我单独使用该代码时,它运行良好,但是当我尝试将它集成到函数或宏中时,值会溢出,并且我会得到像4561033这样的东西.

这是我目前的代码:

__inline int sizeOfArray(BYTE lpArray[]) {
    if(lpArray)
        return (*(&lpArray + 1) - lpArray);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我认为这就是所谓的"未定义行为",但我不知道这意味着什么,以及如何解决它.任何想法都会受到好评.

Lig*_*ica 5

你不能这样做.该函数不知道数组的长度,也无法找到它.

那算术不起作用.一方面,lpArray实际上是一个BYTE*.

要查找数组的大小:

template <typename T, size_t N>
size_t sizeOfArray(const T (&)[N])
{
   return N;
}
Run Code Online (Sandbox Code Playgroud)

然后:

BYTE array[42];
std::cout << sizeOfArray(array) << '\n';  // Output: 42
Run Code Online (Sandbox Code Playgroud)

如果尝试将函数传递给指针,程序将无法编译.

因此,如果不是数组,则在指针后面有一个动态分配的内存块:

BYTE* ptr = new BYTE[42];
Run Code Online (Sandbox Code Playgroud)

......首先,为什么?其次,在这种情况下,您必须自己跟踪这个大小.您可以将其存储到变量中.