跪求高手解惑,小菜鳥在此謝過!1)malloc.h這個頭文件除了malloc()函數,里面還包含realloc() calloc()這幾個函數嗎?2)在某次編程實踐我關于 分配200字節(或25塊整形空間)寫了三種形式:int *p1 = (int *) malloc( 200 ); //VC++6.0環境下int占4字節,此行相當于分配25塊int空間int *p2 = (int *) calloc( 25, sizeof( int ) ); //直接分配25塊int空間int *p3 = (int *) malloc( sizeof( int ) ); //先分配1塊整形空間p3 = (int *)realloc( p3, 200 ); /* 再用realloc函數把一塊整形空間改換成200字節空間,即:把一塊整形空間改換成25塊整形空間(VC++6.0編譯環境) */請 眾多高手 幫我解惑:我的這三種寫法邏輯上對嗎,如果不對應該怎么改?(暫不考慮內存安全問題)我的意思是malloc函數與realloc函數還有calloc函數有什么異同點?3)關于同一段動態分配內存重復釋放的問題:我在A函數分配了一段內存:int *p = (int *) malloc( sizeof( int ) );現在&p作為實參傳遞進入B函數,進行了一些操作,完事以后在B函數將指針變量p指向的空間free掉了,但是由于粗心,在B函數執行完成后返回A函數又執行了一次free(p);這個程序執行時顯示“××.exe已停止工作”(環境是Win7旗艦版SP1),這個是程序自己執行的時候出了問題,還是被操作系統做掉了?以上問題在線跪求高手解答,謝過!
2 回答

三國紛爭
TA貢獻1804條經驗 獲得超7個贊
1)malloc.h 是的,VC 6.0 用 #include <stdlib.h> 就可以了。
2)寫法都對。用 malloc 或 calloc 與個人習慣 有關(各人喜歡,c語言歷史有這2函數)。realloc 用于 隨時可以 增加 動態分配 或 減小 動態分配 空間。另2個函數無此功能。
3) 加條件判斷做釋放: if ( p) free(p);

明月笑刀無情
TA貢獻1828條經驗 獲得超4個贊
1 include stdlib.h instead
2 calloc 分配m個n字節的內存空間,該內存空間被置0
malloc 分配制定直接長內存空間,空間內容未置0
realloc 中如果第一個指針為NULL,等效malloc,如果第一個指針不為空,但是size=0,等效free,指針
,大小都不為0則重新根據內存分配算法挑選合適內存
3 double free 是有可能造成core dump的,free 后置NULL即可,即使free(NULL)也不會出問題,
if(NULL!=p){free(p);p=NULL;} a better way !!!
- 2 回答
- 0 關注
- 243 瀏覽
添加回答
舉報
0/150
提交
取消