中興筆試問(wèn)題指針出錯(cuò)
中興筆試問(wèn)題指針出錯(cuò),請(qǐng)指出這個(gè)程序里的不正確的地方
char *getString()
{
return (char*)malloc(800);
}
int main()
{
char *str;
str = getString();
pintf("%s",str);
return 0;
}
原來(lái)的參考答案:
錯(cuò)誤在于:
在前面的函數(shù)中。malloc分出來(lái)的空間被放在了一個(gè)棧上面
主函數(shù)使用了這個(gè)函數(shù)后操作系統(tǒng)后彈出棧頂
也就是這塊空間被shi放了(9分)
后面那個(gè)printf打印的本來(lái)是指向棧頂?shù)哪莻(gè)地址的。。
但現(xiàn)在彈出了
所以不知道指到哪里去了
也不會(huì)得到自己想要的打印結(jié)果(9分)
個(gè)人認(rèn)為:
這個(gè)根本就不是在棧上,而是在推上,用函數(shù)返回堆的地址,這是很常見(jiàn)的做法啊,大家可以參照高質(zhì)量編程。
這個(gè)我覺(jué)得不會(huì)是中興給的'答案吧
感覺(jué)太水了。不知道大家看出來(lái)多少?
你的想法是正確的。
在一個(gè)函數(shù)中malloc一段內(nèi)存,供另一個(gè)函數(shù)使用,沒(méi)有任何問(wèn)題。
msdn原文如下:
void *malloc(size_t size );
malloc returns a void pointer to the allocated space or NULL if there is insufficient memory available. To return a pointer to a type other than void, use a type cast on the return value. The storage space pointed to by the return value is guaranteed to be suitably aligned for storage of any type of object. If size is 0, malloc allocates a zero-length item in the heap and returns a valid pointer to that item. Always check the return from malloc, even if the amount of memory requested is small.
可見(jiàn),分配是在堆上(heap),而不是在棧上。
但是,對(duì)于這段代碼,有兩個(gè)問(wèn)題需要注意:
1。當(dāng)內(nèi)存不再使用時(shí),應(yīng)使用free()函數(shù)將內(nèi)存塊釋放。其實(shí),free這個(gè)函數(shù)大多人都會(huì)調(diào)用,但是free了并不代表完事了,一定要把指向這個(gè)堆空間的指針清空,這個(gè)題目里應(yīng)使用str=NULL。
2。malloc只管分配內(nèi)存,并不能對(duì)所得的內(nèi)存進(jìn)行初始化,所以得到的一片新內(nèi)存中,其值將是隨機(jī)的。這道題目,打印出來(lái)是亂碼。需要自動(dòng)初始化,可以使用calloc函數(shù)。
【中興筆試問(wèn)題指針出錯(cuò)】相關(guān)文章:
中興硬件筆試題08-29
中興筆試面試經(jīng)驗(yàn)08-23
中興通訊筆試真題07-09
中興筆試題目分享有答案12-07
中興公司筆試真題(含答案)09-24
筆試經(jīng)驗(yàn)-記中興通訊測(cè)試崗兩次筆試01-17
中興面試筆試題目分享答案12-07
C++筆試題:關(guān)于鏈表和指針12-17
2013中興筆試題JSD130911-16