Mã dưới đây trả về một địa chỉ khi được thực hiện trong Windows, mặc dù tôi đã mong đợi nó trả về NULL.Tại sao malloc (0) trả về một địa chỉ không null trong Windows?
int main()
{
char *ptr = NULL;
ptr = malloc(0);
printf("malloc returned = %u\n", ptr);
}
Điều gì có thể đã thúc đẩy việc triển khai malloc như vậy? Có lý do gì đằng sau nó không?
Vì đây là bộ nhớ 0 byte nên tôi không thử viết bất kỳ dữ liệu nào. Nhưng, bộ nhớ này có thể được sử dụng cho bất cứ điều gì cả?
+1 như tôi đã thực sự nhìn thấy 1 người sử dụng này để "lợi thế" của mình khi ông không muốn trường hợp đặc biệt bất cứ điều gì trong một vòng lặp mà có thể phát triển bộ nhớ malloc'd/realloc'd rất lớn. – JimR
Mặc dù vậy, bạn có thể chuyển một con trỏ rỗng vào 'realloc', vì vậy mẹo này không cần thiết. Bạn cũng có thể 'void * p = 0;'. –
@Steve Nó không thực sự là một thủ thuật. Đó là một tạo phẩm của lập trình và thông số kỹ thuật nền tảng rời. Nếu không có thử nghiệm, nó không phải là rõ ràng như thế nào HeapRealloc (heap, HEAP_REALLOC_IN_PLACE_ONLY, 0, 4) sẽ hành xử, ví dụ. – ActiveTrayPrntrTagDataStrDrvr