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

时间:2018-03-08 22:21:17

标签: c++ arrays undefined-behavior

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

这是我目前的代码:

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

    return 0;
}

我认为这就是所谓的“未定义的行为”,但我并不知道这意味着什么以及如何解决它。任何想法都会很受欢迎。

1 个答案:

答案 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}}

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