面试的问题 及回答
1、Postmessage 與 SendMessage的區(qū)別
PostMessage該函數(shù)將一個消息放入(寄送)到與指定窗口創(chuàng)建的線程相聯(lián)系消息隊列里,不等待線程處理消息就返回,是異步消息模式。消息隊列里的消息通過調(diào)用GetMessage和PeekMessage取得
SendMessage該函數(shù)將指定的消息發(fā)送到一個或多個窗口。此函數(shù)為指定的窗口調(diào)用窗口程序,直到窗口程序處理完消息再返回,SendMessage函數(shù)返回值為消息處理結(jié)果。。
2、在一個動態(tài)鏈接庫中new的內(nèi)存能在另一個動態(tài)鏈接庫中釋放嗎?
當(dāng)一個應(yīng)用程序初始化的時候,首先被初始化的是C Run-Time Library,然后才是應(yīng)用程序的入口函數(shù),而Heap對象就是在C Run-Time Library被初始化的時候被創(chuàng)建的。
????? 對于動態(tài)鏈接的C Run-Time Library,運行庫只被初始化一次,而對于靜態(tài)連接的運行庫,每鏈接一次就初始化一次,所以對于每個靜態(tài)鏈接的運行庫都擁有彼此不同的Heap 對象。這樣在某種情況下就會出問題,導(dǎo)致程序崩潰,例如一個應(yīng)用程序調(diào)用了多個DLL,除了一個DLL外,其他的DLL,包括應(yīng)用程序本身動態(tài)連接運行 庫,這樣他們就使用同一個Heap對象。而有一個DLL使用靜態(tài)連接的運行庫,它就擁有一個和其他DLL不同的Heap 對象,當(dāng)在其他DLL中分配的內(nèi)存在這個DLL中釋放時,問題就出現(xiàn)了。
3、幾個內(nèi)存問題
題一·:
void GetMemory( char *p ) {p = (char *) malloc( 100 ); } void Test( void ) {char *str = NULL;GetMemory( str );strcpy( str, "hello world" );printf( str ); }該題傳入的形參是實參本身,而不是取地址,傳入的形參在函數(shù)內(nèi)部改變時并不能真正改變傳入形參的值,執(zhí)行完GetMemory(str)函數(shù)后,str依然為NULL.
題二
?運行完str=GetMemory()時,str的值還是正確的,但是執(zhí)行printf(str)時,printf內(nèi)部的三個變量覆蓋了str原有的直,網(wǎng)上解釋為,p為局部變量,調(diào)用完GetMemery()后,P指向的內(nèi)存釋放,即str指向內(nèi)存釋放,所以打印的為不確定亂碼
題三
void GetMemory( char **p, int num ) {*p = (char *) malloc( num ); } void Test( void ) {char *str = NULL;GetMemory( &str, 100 );strcpy( str, "hello" );printf( str ); }? 能夠成功,但最好加上判斷是否申請內(nèi)存成功。
題四
void?Test(?void?){
char *str = (char *) malloc( 100 );strcpy( str, "hello" );free( str );
if(NULL != str)
{
strcpy(str, "123456");
printf(str);
}
}
?
free()后應(yīng)將str置為NULL,,不置為空,if內(nèi)部操作的為野指針,會出現(xiàn)崩潰問題。。
?
轉(zhuǎn)載于:https://www.cnblogs.com/fenglangxiaotian/p/9445283.html
總結(jié)
- 上一篇: Python在mysql中进行操作是十分
- 下一篇: Datalogic得利捷引领工业4.0时