第 7 章 內(nèi)存分配
問題列表:
7.1 為什么這段代碼不行?
char *answer; printf("Type something:\n");
gets(answer); printf("You typed \"%s\"\n", answer);
7.2 我的strcat() 不行.我試了char *s1 = "Hello, "; char *s2 = "world!"; char *s3 = strcat(s1, s2); 但是我得到了奇怪的結(jié)果。
7.3 但是strcat 的手冊頁說它接受兩個char * 型參數(shù)。我怎么知道(空間) 分配的事情呢?
7.4 我剛才試了這樣的代碼char *p; strcpy(p, "abc"); 而它運(yùn)行正常?怎么回事?為什么它沒有崩潰?
7.5 一個指針變量分配多少內(nèi)存?
7.6 我有個函數(shù), 本該返回一個字符串, 但當(dāng)它返回調(diào)用者的時候, 返回串卻是垃圾信息
7.7 那么返回字符串或其它集合的爭取方法是什么呢?
7.8 為什么在調(diào)用malloc() 時, 我得到“警告: 整數(shù)賦向指針需要類型轉(zhuǎn)換”?
7.9 為什么有些代碼小心地把malloc 返回的值轉(zhuǎn)換為分配的指針類型。
7.10 在調(diào)用malloc() 的時候, 錯誤“不能把void * 轉(zhuǎn)換為int *” 是什么意思?
7.11 我見到了這樣的代碼char *p = malloc(strlen(s) + 1); strcpy(p,s); 難道不應(yīng)該是malloc((strlen(s) + 1) * sizeof(char))?
7.12 我如何動態(tài)分配數(shù)組?
7.13 我聽說有的操作系統(tǒng)程序使用的時候才真正分配malloc 申請的內(nèi)存。這合法嗎?
7.14 我用一行這樣的代碼分配一個巨大的數(shù)組, 用于數(shù)字運(yùn)算: double*array = malloc(300 * 300 * sizeof( double )); malloc() 并沒有返回null, 但是程序運(yùn)行得有些奇怪, 好像改寫了某些內(nèi)存, 或者malloc() 并沒有分配我申請的那么多內(nèi)存, 云云。
7.15 我的PC 有8 兆內(nèi)存。為什么我只能分配640K 左右的內(nèi)存?
7.16 我的程序總是崩潰, 顯然在malloc 內(nèi)部的某個地方。但是我看不出哪里有問題。是malloc() 有bug 嗎?
7.17 動態(tài)分配的內(nèi)存一旦釋放之后你就不能再使用, 是吧?
7.18 為什么在調(diào)用free() 之后指針沒有變空?使用(賦值, 比較) 釋放之后的指針有多么不安全?
7.19 當(dāng)我malloc() 為一個函數(shù)的局部指針分配內(nèi)存時, 我還需要用free() 明確的釋放嗎?
7.20 我在分配一些結(jié)構(gòu), 它們包含指向其它動態(tài)分配的對象的指針。我在釋放結(jié)構(gòu)的時候, 還需要釋放每一個下級指針嗎?
7.21 我必須在程序退出之前釋放分配的所有內(nèi)存嗎?
7.22 我有個程序分配了大量的內(nèi)存, 然后又釋放了。但是從操作系統(tǒng)看, 內(nèi)存的占用率卻并沒有回去。
7.23 free() 怎么知道有多少字節(jié)需要釋放?
7.24 那么我能否查詢malloc 包, 可分配的最大塊是多大?
7.25 向realloc() 的第一個參數(shù)傳入空指針合法嗎?你為什么要這樣做?
7.26 calloc() 和malloc() 有什么區(qū)別?利用calloc 的零填充功能安全嗎?
7.27 alloca() 是什么?為什么不提倡使用它?
相關(guān)推薦:2010年9月計(jì)算機(jī)等級考試成績查詢時間匯總北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |