面試易錯題 陷阱題集一

2021-06-25 21:08:14 字數 735 閱讀 3032

1.【oj】設計乙個函式sum(n)=1+2+...+n,假設sum(n)不超過整型數表示範圍。

錯誤解法:

int sum(n)
錯誤在於:n*(n+1)時可能已經超出了整型數的表示範圍,造成溢位錯誤。

int sum(n)
2.【美圖】請寫出下面程式的執行結果。

void func(void)

printf("%s", dst);

}

易錯之處:

①free後只是將堆空間交還給系統,並不對指標變數dst和dst所指向的記憶體空間內容進行修改;

②free後的dst指標是野指標,如果系統在free後占用dst所指空間,那麼對dst的操作將產生錯誤,如果系統並沒占用dst所指空間,操作是成功的,但是隱患很大。

所以上面**執行結果可能為:程式出錯,非法訪問記憶體;輸出world字樣。

3.【美圖】請指出下面程式的錯誤。

char* func(char *s, int len)
易錯之處:

①memcpy與strcpy不同,memcpy嚴格按照指定引數len來複製位元組數,所以這裡可能會遺漏'\0'字串結束符,導致錯誤;

②dst為區域性變數,當函式返回時,dst所指向的1024個位元組空間將被釋放(退棧),所返回的dst指標指向的內容會被其他內容所覆蓋,所以返回的dst是無用的。

面試易錯題 陷阱題集一

1.oj 設計乙個函式sum n 1 2 n,假設sum n 不超過整型數表示範圍。錯誤解法 int sum n 錯誤在於 n n 1 時可能已經超出了整型數的表示範圍,造成溢位錯誤。int sum n 2.美圖 請寫出下面程式的執行結果。void func void printf s dst 易錯...

面試中的易錯題

include int main int b 3 2 int p,m p a 0 m b 0 printf d n p 0 輸出1 注意逗號表示式 printf d n m 0 輸出0 注意逗號表示式 記憶體中的資料儲存的都是補碼形式 模 絕對值 補碼,舉例 八位數的補碼怎麼求,通常老師教的是,正數...

c易錯題(一)

刷題也有幾天了,把自己刷題過程的錯題整理出來,以便以後不會再犯同樣的錯誤 1.已知int a 3 4 則下列可以表示a 1 2 元素的值的是 a.a 1 2 b.a 1 2 c.a 0 1 2 d.a 0 1 這道題看著不是很難,差不多可以選出a,但是卻不一定理解下邊的選項為啥錯。下邊我來乙個乙個分...