我將一個數據緩衝區轉換爲較大尺寸的結構指針。它會導致任何問題?我在Visual Studio上試過下面的代碼,沒有發現警告或錯誤。鑄造較大尺寸結構的緩衝區
#include <iostream>
using namespace std;
struct test
{
char var1;
char var2;
long var3;
};
void function(char* data);
int main (void)
{
char data[5] = {1, 0, 0, 3, 4};
function(data);
system("Pause");
return 0;
}
void function(char* data)
{
test* pTest = reinterpret_cast<test*>(data); // casting
printf("%x\n", pTest->var1);
printf("%x\n", pTest->var2);
printf("%x\n", pTest->var3);
}
我會說這是一個問題,你是*做這個*首先。數據的字節大小爲5,但根據編譯器的填充行爲,「struct test」的字節大小至少爲6,可能爲8。因此,當您訪問'var3'時,重新解釋的數據會在數據末尾讀取到某個未知的內存區域。這應該會在運行時導致分段錯誤(但可能不會,這取決於'malloc()'在您的系統上的工作方式)。 TL; DR;如果這恰好適合你,那只是運氣。爲了使它變成明智的代碼,'sizeof(data)'必須> ='sizeof(test)'。 – kampu
任何你看着這只是一個壞主意。 – WhozCraig
這看起來可能會起作用,甚至可能會像您期望的那樣運行,但它有可能在隨機時間導致不正確的數據和崩潰。這不會有好處。 – Steve