1. 程式人生 > >C/C++常考面試題

C/C++常考面試題

1. malloc和free

下面程式碼會出現什麼問題?

void GetMemory( char **p, int num )
{
 *p = (char *) malloc( num );
}
void Test( void )
{
 char *str = NULL;
 GetMemory( &str, 100 );
 strcpy( str, "hello" ); 
 printf( str ); 
}

參考答案

(1) 傳入GetMemory的引數為字串指標的指標,但是在GetMemory中執行申請記憶體及賦值語句
*p = (char *) malloc( num );


後未判斷記憶體是否申請成功,應加上:

if ( *p == NULL )
{
     //進行申請記憶體失敗處理
}

(2) 未釋放堆記憶體

free(str);
str=NULL;

(3) printf(str) 改為 printf("%s",str),否則可使用格式化字串攻擊

2. swap

看看下面的一段程式有什麼錯誤?

swap( int* p1,int* p2 )
{
 int *p;
 *p = *p1;
 *p1 = *p2;
 *p2 = *p;
}

參考答案:
在swap函式中,p是一個“野”指標,有可能指向系統區,導致程式執行的崩潰。在VC++中DEBUG執行時提示錯誤“Access Violation”。
如果改為

swap( int* p1,int* p2 )
{
 int *p=NULL;
 *p = *p1;
 *p1 = *p2;
 *p2 = *p;
}

還是錯誤,錯在形參並沒有改變實參的值。
改為

swap( int* p1,int* p2 )
{
 int p= *p1;
 *p1 = *p2;
 *p2 = p;
}

這樣是可以的。

swap (int &num1, int &num2)
{
    int p=num1;
    num1=num2;
    num2=p;
}

相關推薦

C++試題

轉自:https://www.cnblogs.com/liufei1983/p/7099401.html 1 new/delete 與 malloc/free的區別     運算子是語言自身的特性,有固定的語義,編譯器知道意味著什麼,由編譯器解釋語義,生成相應的程式碼。

C/C++試題

1. malloc和free 下面程式碼會出現什麼問題? void GetMemory( char **p, int num ) { *p = (char *) malloc( num ); } void Test( void ) { char *str

Java試題(三)

請求 其中 默認 查找 重新 技術分享 block 知識 logs     序言        說說今天遇到的一件小事吧,在遇到問題,查找答案時,看到很多人的博客裏面都有提到關鍵字眼,可讓人覺得可恨的是,大多數人寫的博文中,基本上都是照著書上的語言發表的,看了跟沒看一樣,沒

Java試題(一)

div 並且 功能 不出 共享 情況 字符型 對象 java字節碼       序言         我是一只亂飛亂撞的菜鳥,寫的文章目前是以記錄自己學習,和方便以後查看,期待日後不久能通過自己的努力,獲得一點小小的成功,然後寫出我的學習經驗總結性文章來。         

Java試題

class 出了 維護 們的 封裝 cep jdb destroy 輸出 Java集合類框架的基本接口有哪些? 參考答案 集合類接口指定了一組叫做元素的對象。集合類接口的每一種具體的實現類都可以選擇以它自己的方式對元素進行保存和排序。有的集合類允許重復的鍵,有些不允許。

計算機網絡試題總結

計算 art msl csdn 什麽 http協議 net 輸入 控制 這裏先將搜集到的題目列出來,日後一一精細得寫完。 https://blog.csdn.net/u013408431/article/details/62442670 https://blog.csdn.

HTTP試題

HTTP與HTTPS的區別 HTTP 的URL 以http:// 開頭,而HTTPS 的URL 以https:// 開頭 HTTP 是不安全的,而 HTTPS 是安全的 HTTP 標準埠是80 ,而 HTTPS 的標準埠是443 在OSI 網路模型中,HTTP工

Java試題11 內部類可以引用它的包含類(外部類)的成員嗎?有沒有什麼限制?

問:內部類可以引用它的包含類(外部類)的成員嗎?有沒有什麼限制? 答: 完全可以。如果不是靜態內部類,那沒有什麼限制!如果你把靜態巢狀類當作內部類的一種特例,那在這種情況下不可以訪問外部類的普通成

Java 試題及答案(吐血總結)持續更新...

1、解釋Java面向物件的特徵: 抽象、封裝、繼承、多型。 2、面向物件的好處是什麼? 3、Java常用的關鍵字、修飾符的使用 4、Java中的引數傳遞(值傳遞、引用傳遞) 5、簡述內部類、靜態內部類、匿名內部類的區別 6、try catch finally的

Java試題 (整理) 牛客網

    本文是牛客網的Java面試常考題 本人整理了一下 去除了 Applet Swing RMI 等不常考的 還有比較一些easy的題目。     原文連結  https://www.nowcoder.com/ta/review-java 下面還有精彩的討論  1、什

計算機網路基礎試題精華總結

1、OSI,TCP/IP,五層協議的體系結構,以及各層協議 答:OSI分層 (7層):物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層。 TCP/IP分層(4層):網路介面層、 網際層、運輸層、 應用層。 五層協議 (5層):物理層、資料鏈路層、網路層、運輸層

Java試題6 equals相同的物件對於的hashCode是否相等?

問: 兩個物件值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對? 答: 不對!! 如果兩個物件x和y滿足x.equals(y) == true,它

SSh三大框架試題

Hibernate工作原理及為什麼要用?  原理:  讀取並解析配置檔案 讀取並解析對映資訊,建立SessionFactory 開啟Sesssion 建立事務Transation 持久化操作 提交事務 關閉Session 關閉SesstionFactory 為什麼要用: 

[Java試題-牛客網] 第1-10題

轉載請註明出處第1題:什麼是Java虛擬機器?為什麼Java被稱作是“平臺無關的程式語言”?Java虛擬機器JVM(java virtual machine)是一個執行位元組碼的程式。Java寫的程式碼儲存為字尾為.java的檔案,它會被特定的程式(javac.exe)編譯,

軟體測試試題-軟體測試面試寶典

問:你在測試中發現了一個  bug ,但是開發經理認為這不是一個  bug ,你應該怎樣解決。 首先,將問題提交到缺陷管理庫裡面進行備案。 然後,要獲取判斷的依據和標準: 根據需求說明書、產品說明、設計文件等,確認實際結果是否與計劃有不一致的地方,提供 缺陷是否確認的直接依

阿里巴巴試題

一、String,StringBuffer, StringBuilder 的區別是什麼?String為什麼是不可變的? 答:   1、String是字串常量,StringBuffer和StringBuilder都是字串變數。後兩者的字元內容可變,而前者建立後內容不可變。 2、String不可變

計算機網路基礎試題

1、OSI,TCP/IP,五層協議的體系結構,以及各層協議 答:OSI分層 (7層):物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層。 TCP/IP分層(4層):網路介面層、 網際層、運輸層、 應用層。 五層協議 (5層):物理層、資料鏈路層、網路層、運輸層、

JS 進階知識點及試題

將會學習到一些原理相關的知識,不會解釋涉及到的知識點的作用及用法,如果大家對於這些內容還不怎麼熟悉,推薦先去學習相關的知識點內容再來學習原理知識。 手寫 call、apply 及 bind 函式 涉及面試題:call、apply 及 bind 函式內部實現是怎麼樣的? 首先從以下幾點來考慮如何

前端面試大全:JS 基礎知識點及試題(一)

(內容同步自小鄒的頭條號:滬漂程式設計師的生活史) 原始(Primitive)型別 涉及面試題:原始型別有哪幾種?null 是物件嘛? 在 JS 中,存在著 6 種原始值,分別是: boolean null undefined number

Java試題8 深刻認識JAVA過載和重寫 以及是否可以根據返回型別來區分過載

問:過載(Overload)和重寫(Override)的區別。 過載的方法能否根據返回型別進行區分?  答: 方法的過載和重寫都是實現多型的方式,區別在於前者實現的是編譯時的多型性,而後者實現的是執行時的多型性。 過載發生在一個類中,同名的方法如果有不同的引數列表(引數