Bagikan melalui


Compiler Warning (Level 1) C4731

'pointer' : frame pointer register 'register' dimodifikasi oleh kode assembly sebaris

Register penunjuk bingkai dimodifikasi. Anda harus menyimpan dan memulihkan register di blok rakitan sebaris atau variabel bingkai (lokal atau parameter, tergantung pada register yang dimodifikasi), atau kode Anda mungkin tidak berfungsi dengan baik.

Sampel berikut menghasilkan C4731:

// C4731.cpp
// compile with: /W1 /LD
// processor: x86
// C4731 expected
void bad(int p) {
   __asm
   {
      mov ebp, 1
   }

   if (p == 1)
   {
      // ...
   }
}

EBP adalah penunjuk bingkai (FPO tidak diizinkan) dan sedang dimodifikasi. Ketika p kemudian dirujuk, itu dirujuk relatif terhadap EBP. Tetapi EBP telah ditimpa oleh kode, sehingga program tidak akan berfungsi dengan baik dan bahkan mungkin salah.