假設有20個內存塊,并且指針p指向第一個塊?,F在,當我這樣做時:p++;free(p);多少個內存塊將被釋放,為什么?
3 回答

HUH函數
TA貢獻1836條經驗 獲得超4個贊
這取決于。您的問題沒有提供足夠的信息。
如果p++導致p引用也由分配的malloc()塊,則該塊將返回到堆(無論分配了什么大小)。但是,如果它不是指向動態分配的塊的指針,則將破壞堆,結果是不確定的,但永遠不會好!
因此,例如,如果您要這樣做:
struct sBlock* p = malloc( 20 * sizeof(struct sBlock) ) ;
p++ ; // point to second block
free( p ) ; // Heap corruption or runtime error
不需要C運行時來捕獲此類錯誤,但是某些實現或調試環境可能會這樣做。通常,在破壞了堆用來跟蹤內存的結構之后,嘗試分配或釋放更多的內存之前,不會注意到該錯誤。實際的故障模式將是無法預測的,并且通常會在代碼接近度和與實際錯誤的時間上發生一定距離,從而使調試變得困難。
- 3 回答
- 0 關注
- 607 瀏覽
添加回答
舉報
0/150
提交
取消