前幾天,去乙個公司面試實習生,遇到下面這個題:
void
test(void)
void
get_memory(char *p)
問此段**的執行結果?如果有錯誤怎麼改,為什麼?
拿到這道題的時候,感覺都對著呢,剛開始以為是malloc()申請完空間,函式結束釋放了,可後來想到如果malloc()申請的空間沒有free(),則此空間仍然存在,所以不是這個問題。那我就想會不會是記憶體洩漏呢?因為申請的空間沒有free(),而且strcpy也是乙個不安全的函式,也有可能造成記憶體洩漏,可是考點真的是這個麼,我猶豫了,因為就算不釋放,也不會影響到程式的執行結果。
回來後,我除錯這個程式,執行結果是段錯誤。按照自己的想法對**進行了修改,依然是段錯誤。除錯的時候,發現get_memory()中p的值的確是乙個位址,而列印test()中的str的位址卻是0。看來p並沒有真正的返回到str中。
其實,我們要修改的是指標,下面是正確的**段(加粗斜體部分是修改的部分):
void
test(void)
void
get_memory(char **p)
是不是豁然開朗呢?沒錯,考得就是二級指標,和傳參的問題。我們需要修改的是str的位址,而不是str所指向空間。
覺得自己很菜啊,一定要認真,仔細的看題,平時一定要多多實踐。
關於乙個面試題目
曾經碰到乙個面試題目,誰能給出標準答案呢?200個小孩圍乙個圈,從頭開始1到4報數,報到4這個數的退出圓圈,最後乙個留在圈裡的小孩編號是多少?在網上看到很多人給出的答案是 標準答案.public static void main string args while list.size 4 syste...
關於unsiged char 的乙個面試題
剛才在孫曉亮的部落格上看到一道c語言面試題,說是乙個小問題,但我在看完標題之後都感覺出來他要考察變數型別表示越界問題了,因為以前在電腦鼠的演算法程式中有過類似的問題,當時姚司還問過,但當時沒想出來,後來才恍然大悟的。下面把這道題貼出來大家一塊看看吧。首先宣告一下 寫這個不是為了裝b,本人c語言功底不...
面試題 關於指標
面試題 下列c 程式會在哪一行崩潰?struct s main 分析 int p s.i時,一直到p 0 4,p 1 3的時候,p始終等於 s.i。s.p p 建立了如下的關係 s.p存了p的值,也即 s.i,s.p 1 相當於 s.i 1 即s.i的位址加1.也就是s.p.s.p 1 和s.p其實...