VC++中內聯同名類導致的棧破壞問題

假設有這麼個類,它將一個變量從0臨時變爲1:   我們做2份:

(1)放到工程內的stdafx。h形成預編譯頭

class CA

{

public :

          CA(int* pToBeSet1){ 

                   m_pInt=(*pToBeSet1)  ;

(*pToBeSet1)=1;//臨時將一個變量改爲1

            }

~CA(){

(*m_pInt)=0;//還原

         }

BYTE x[128];

int* m_pInt;

}

(2)外部頭x.h

class CA

{

public :

          CA(int* pToBeSet1){ 

                   m_pInt=(*pToBeSet1)  ;

(*pToBeSet1)=1;//臨時將一個變量改爲1

            }

~CA(){

(*m_pInt)=0;//還原

         }

int* m_pInt;

}


調用者

#include 《x.h》

Init()

{

int x=0;

{

CA auto_change(&x);

}


}

由於內聯函數可能內聯了stdafx中的代碼而由於#include 《x.h》導致計算init局部變量過小而導致形成棧溢出的指令,


這個問題會導致系統不穩定,並且不定期崩潰


所以編程中應當儘量避免出現相同函數名和實現下的不同類結構




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章