亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求助大佬,請問內存分配(Memory Allocate) 問題,具體如下~

求助大佬,請問內存分配(Memory Allocate) 問題,具體如下~

慕勒3428872 2021-12-31 06:22:21
跪求高手解惑,小菜鳥在此謝過!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);

查看完整回答
反對 回復 2022-01-03
?
明月笑刀無情

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 !!!

查看完整回答
反對 回復 2022-01-03
  • 2 回答
  • 0 關注
  • 243 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號