该函数存在内存错误。

原因是在第三行代码中,将一个IMG_CHAR类型的数组aArray的地址加上9,然后将其强制转换为IMG_WORD*类型的指针pwtr。这样做是合法的,因为指针pwtr仍然指向了数组aArray内的一个元素。

但在第四行代码中,将指针pwtr指向的值赋给了变量wn。由于pwtr指向的是数组的最后一个元素,而IMG_WORD的大小通常大于等于IMG_CHAR的大小,所以在这里访问了数组之外的内存,导致了内存错误。

修改代码的方法是,将第四行代码改为访问指针pwtr之前的元素,即将pwtr减去1,然后再将其指向的值赋给变量wn

修改后的代码如下:

void Test_2_9()
{
    IMG_CHAR aArray[10];
    IMG_WORD *pwtr = (IMG_WORD*)(aArray + 8);   // 修改为 aArray + 8
    IMG_WORD wn = *(pwtr - 1);                  // 修改为 *(pwtr - 1)
}

原文地址: https://www.cveoy.top/t/topic/pJbD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录