Bagikan melalui


Compiler Warning (level 1) C4750

'identifier': function with _alloca() inlined into a loop

Keterangan

Fungsi 'pengidentifikasi' memaksa perluasan _alloca fungsi sebaris dalam perulangan, yang dapat menyebabkan luapan tumpukan ketika perulangan dijalankan.

Untuk memperbaiki kesalahan ini

  1. Pastikan bahwa fungsi 'pengidentifikasi' tidak dimodifikasi dengan penentu __forceinline .

  2. Pastikan bahwa fungsi 'pengidentifikasi' tidak berisi _alloca fungsi yang terkandung dalam perulangan.

  3. Jangan tentukan sakelar /O1kompilasi , /O2, /Ox, atau /Og .

  4. Tempatkan _alloca fungsi dalam pernyataan try-except yang akan menangkap luapan tumpukan.

Contoh

Contoh kode berikut memanggil MyFunction dalam perulangan, dan MyFunction memanggil _alloca fungsi . Pengubah __forceinline menyebabkan perluasan _alloca fungsi sebaris.

// c4750.cpp
// compile with: /O2 /W1 /c
#include <intrin.h>

char * volatile newstr;

__forceinline void myFunction(void) // C4750 warning
{
// The _alloca function does not require a __try/__except
// block because the example uses compiler option /c.
    newstr = (char * volatile) _alloca(1000);
}

int main(void)
{
    for (int i=0; i<50000; i++)
       myFunction();
    return 0;
}

Baca juga

_alloca