1、傳址申請記憶體問題。
看下面乙個例子。
struct complex_t //複數;int create(complex_t *p, unsigned int n)
然後在main函式中呼叫該函式:
complex_t *comps = null;if(create(comps, 10) < 0) //呼叫函式
if(comps == null)
//其它操作
create函式的第乙個引數,型別時complex_t * 。 然後,在create裡面給p分配了一塊儲存空間。指標做引數,將申請的記憶體位址返回。
其實執行之後comps == null。
main函式中呼叫create函式時,把comps賦值給p。即指標p指向與comps相同的一段儲存空間。 但是,在create裡面,p=new complex_t[n],使得p又指向了一塊新的儲存空間。而此時,comps還是指向原來的儲存空間。所以,在create裡面對p做的更改對comps並沒有影響。
函式create裡的引數 complex_t *可以整體模擬成int;這樣就好理解多了。
通過上面的分析,不難給出解決辦法:
int create(complex_t **p, unsigned int n)
記憶體操作函式
calloc 配置記憶體空間 相關函式 malloc,free,realloc,brk 表頭檔案 include 定義函式 void calloc size t nmemb,size t size 函式說明 calloc 用來配置nmemb個相鄰的記憶體單位,每一單位的大小為size,並返回指向第乙...
記憶體操作函式
記憶體操作函式 1 memset 主要用於清0 include void memset void s,int c,size t n 功能 將s的記憶體區域的前n個位元組以引數c填入 引數 c 填充的字元,c雖然引數為int,但必須是unsigned char 範圍為0 255 n 指定需要設定的大小...
記憶體操作函式 malloc
函式 malloc void malloc size t size 在記憶體塊獲取區塊。標頭檔案 malloc.h 返回值 如果分配成功則返回指向被分配記憶體的指標 此儲存區中的初始值不確定 否則返回空指標null。記憶體釋放 當記憶體不再使用時,應使用free 函式將記憶體塊釋放。函式返回的指標一...