Tuesday, March 13, 2012

常見debug錯誤檢查

要檢查陣列頭尾會不會出錯

要檢查沒有輸入、非法輸入、是不是沒有對應回傳


.

不想讀到之前留下來的換行字元

scanf(" %c,&place");

//可以在%c前面空一格

Friday, March 9, 2012

深度學習C++ 習題練習

深度學習C++習題

做過的章節:


正在做的章節:
1,


有問題的題目:
01 程設導論: 1,2,11,10,



.

Wednesday, March 7, 2012

位置轉換 printf("%f",5);的問題

#inlcude
int main()
{
printf("%f",5);
printf("%d",5.01);
}

首先參數5為int型別,32位元平臺中為4位元組,因此在stack中分配4位元組的記憶
體,用於存放參數5。
然後printf根據說明符"%f",認為參數應該是個double型別(在printf函式中,float會自
動轉換成double),因此從stack中讀了8個位元組。
很顯然,記憶體存取越界,會發生什麼情況不可預料。如果在printf或者scanf中指定了"%f"
,那麼在後面的參數列表中也應該指定一個浮點數,或者一個指向浮點變數的指標,否則不應載
入支援浮點數的函式。

於是("%f",5)有問題,而("%f",5.0)則可行。


答案:
第一個答案是0.000000
第二個答案是一個大數



.

Monday, March 5, 2012

綜合面試題目

詹傑淳學長面試經驗

HTC面試考古題

(資料整理自ptt tech_job版)

C:指標的觀念, 如單, 雙指標, int指標 與char指標轉換後的位址處理, 字元字串,一維陣列,二維陣列的運用和宣告方式(int *p,char *p,*p++,(*p)++),傳值和傳址,轉型,static,#define,#ifdef,#ifndef

C++: 物件導向的觀念(建構、解構、繼承、多型...等), 建構 解構順序, static, const, extern, virtual function,繼承,動態配置變數, 陣列, public, private, 轉型, reference type, auto_ptr, 繼承時候的建構解構順序, 變數的可視範圍(scope)

JAVA :
JAVA就更偏物件導向了,雖然還是有一些指標和字串,主要有考
Thread,Runnable,public,private,protected,繼承,函式的多型,virtual,
try and catch and finally的使用,身為Java苦手,大概爆掉了QQ

智力測驗數列: 不是mod就是差或是交叉的差



考完後有面試, 會被問到跟OS, 行程, 線程, 記憶體管理出狀況時, 如何了解問題並判斷原因跟解法.


1.填充題,利用跳脫字元印出含有 " " 以及 \ 的符號
2.填充題,輸入任意三個整數,最後可以輸出最小的那個
int Min(int a,int b, int c)
{
(a<=b && a<=c) ? return a : ________________
}
應該是這樣@@ ,總之似乎要考懂得 ? : 的用法
3.計算題,continue的用法
給你一段迴圈,裡面有包含continue、if的敘述,問你最後執行結果是啥
ex: for i=0;i<=15;i++
if i<=4 && i>=6 continue
if i>=10 printf("XXX")
類似這種的

4.計算題,給你兩個.h檔 a.h b.h
a.h會用到 b.h的參數
b.h會用到 a.h的參數
要如何修改程式碼使得編譯器不會產生錯誤
有給提示:用ifndef

5.計算題,考#define位置的觀念
#define xxx yyy
函數A
函數B

函數A
#define xxx yyy
函數B
兩種情況時,A B輸出的結果會不會有差別?

6.填充題,指標與雙重指標觀念
且定義 int* p ;
int** pp;
考你類似 *p+1=? **p+2=?
(這部分有點忘了~不確定題目是不是這樣@@)

7.填空題,定義函數
給你一段程式碼,要你定義一個函數以符合最後結果
這題好像有用到C++的語法~看不太懂@@"
所以就直接跳過了

8.計算題,無窮遞迴觀念
void Res(void)
{
printf("start\n");
Res();
printf("End\n");
}
有兩小題吧
a.問你這個函數會不會一直跑下去不會停止? 為什麼?
b.最後會不會印出 End?
(會 stack overflow;不會)

9.計算題,考變數生命週期的觀念
給你一段程式碼
問你local.global.static變數最後的值會是多少?
void Res(void)
給你一個陣列Arr[3]={100,200,300};

10.問答題,指標變數的錯誤?
給你一段程式碼,其中有包含迴圈以及指標變數 char*
程式碼compile會過,但最後結果並不是原本想要的那樣
問你原因出在哪? 並修改之
(注意char* a=""是const char* ,不能改)

11.忘了

12.計算題,寫一個函數,如何不用遞迴的方式寫出費伯納西數列(Fibonacci)?
ex: Fib(7)=13,且不能用遞迴



.

auto_ptr 自動管理配置資源

auto_ptr 自動管理配置資源


.

Friday, March 2, 2012

C++陣列過大造成stack overflow?

C++陣列過大造成stack overflow?

像這兩個會爆
//long long a[130000]={0};
//int a[260000]={0};


.

指標變數 vs 常數指標

指標變數 vs 常數指標
1.
char *ptr="123456";
ptr[0]='a'; //error
//因為*ptr在此是全域常數

2.
char ptr[]="123456";
ptr[0]='a'; //ok
//因為ptr在此是區域變數




.

Dangling Pointer 迷途指標 vs 空指標

當delete一個指標的時候,實際上僅是讓編譯器釋放記憶體,但指標本身依然存在。這時
它就是一個迷途指標。

當使用以下敘述時,可以把迷途指標改為空指標:
MyPtr=0;

通常,如果在刪除一個指標後又把它刪除了一次,程式就會變得非常不穩定,任何情況
都有可能發生。但是如果你只是刪除了一個空指標,則什麼事都不會發生,這樣做非常
安全。

使用迷途指標或空指標(如MyPtr=0)是非法的,而且有可能造成程式當機。如果指標是
空指標,儘管同樣是當機,但它同迷途指標造成的當機相比是一種可預料的當機。這樣
除錯起來會方便得多。

(擷取自程式設計師面試寶典)



維基百科進一步解釋

.