Tôi đã overloadded mới [] như thế nàyTruy vấn mới [] của C++ đã quá tải: Kích thước nào lấy tham số? điều hành
void * human::operator new[] (unsigned long int count){
cout << " calling new for array with size = " << count << endl ;
void * temp = malloc(count) ;
return temp ;
}
và bây giờ gọi
human * h = new human[14] ;
nói sizeof(human) = 16
, nhưng đếm nó in là 232 mà là 14 * 16 + sizeof (int *) = 224 +8.
Tại sao không gian bổ sung này được phân bổ? Và nó ở đâu trong trí nhớ? Vì khi tôi in *h
HOẶC h[0]
Tôi nhận được kết quả tương tự, do đó, nó không ở đầu bộ nhớ. Có đúng không HOẶC tôi đang thiếu một số thứ ở đây?
Câu hỏi hay. Tuy nhiên, nitpicker bên trong tôi cần phải chỉ ra rằng bạn không kiểm tra malloc() trả về một con trỏ null. – sharptooth
@sharptooth: ur đúng nhưng đó là cố ý coz tôi muốn tập trung vào câu hỏi thực sự và không thêm quá nhiều ifs :) Lý tưởng nhất là cần kiểm tra temp! = 0 khác ném một số ngoại lệ (bad_alloc kinda) –
byte bổ sung là để lưu trữ số byte được phân bổ. Nhưng nơi nó lưu trữ được thực hiện phụ thuộc. – bjskishore123