2012-11-08 38 views
5

thể trùng lặp:
Do I cast the result of malloc?là nó cần thiết để gõ đúc malloc và calloc

Tôi đã googling để tìm hiểu lý do cho loại đúc của malloccalloc. Nhưng, tôi chỉ tìm thấy loại đúc malloc là không cần thiết vì nó trả về con trỏ trống nhưng, về số calloc. Đây cũng là lý do tương tự cho calloc quá ???

Bây giờ, nếu chúng ta di chuyển trở lại điểm đầu tiên, về giá trị trả về của malloccalloc. Sau đó, tôi thấy rằng, cả hai đều trả về không gian được phân bổ. Vì vậy, tôi hơi bối rối ở đây. Vì vậy, câu hỏi của tôi là

  1. giá trị trả về của malloccalloc

  2. là gì Có cần thiết phải gõ đúc malloccalloc. Và tại sao ?

+0

@hmjd có thể .. nhưng ở đây tôi yêu cầu cả 'malloc' và' calloc' nữa. – Ravi

+0

Vâng, đây là một bản sao, nhưng trình biên dịch nhận được nhiều hơn pissy về yêu cầu bạn bỏ con trỏ void cho bất kỳ loại khác - bay vào mặt của mục đích ban đầu của một con trỏ void, đó là một loại phổ quát có thể được đúc và gán cho bất cứ điều gì. Đây là C "tiến bộ" hơn. – user2548100

Trả lời

7

Giá trị trả lại của malloc và calloc là gì?

Đây là con trỏ đến void (void*).

Có cần phải nhập malloc và calloc không. Và tại sao ?

Không, vì chuyển đổi từ con trỏ thành void thành con trỏ tới đối tượng là ẩn.

C11 (n1570), § 6.3.2.3 Pointers
Một con trỏ tới void có thể được chuyển đổi sang hoặc từ một con trỏ đến bất kỳ loại đối tượng.

Nó phù hợp cho cả malloccalloc.

+1

+1 để tham khảo – CCoder

1

giá trị trả về của malloc() và calloc() là gì?

void *malloc(size_t size); 
void *calloc(size_t nmemb, size_t size); 

void* được trả về bởi cả các chức năng.

Cần thiết phải nhập malloc và calloc. Và tại sao ?

No. Không bắt buộc phải nhập. Các hàm malloc()calloc() trả về một con trỏ tới bộ nhớ được cấp phát phù hợp cho bất kỳ loại biến nào. Khi lỗi, các hàm này trả về NULL. NULL cũng có thể được trả về bằng một cuộc gọi thành công đến malloc() với kích thước bằng 0 hoặc bằng cách gọi thành công tới calloc() với nmemb hoặc kích thước bằng 0.

2

malloc() hoặc calloc() lợi nhuận void * mà có thể được gán cho bất kỳ loại con trỏ .Tại C nó không phải là cần thiết để định kiểu các void* kể từ khi nó được thực hiện bằng cách ngầm compiler.But trong C++ nó sẽ cung cấp cho bạn báo lỗi nếu bạn sẽ không định kiểu

1

Giá trị trả lại là malloccallocvoid*. Địa chỉ của không gian bộ nhớ heap được phân bổ bởi các hàm này.

Cả hai chức năng đều cấp phát bộ nhớ. Sự khác biệt duy nhất giữa chúng là

  • malloc chỉ phân bổ bộ nhớ một cách đơn giản.
  • calloc phân bổ bộ nhớ và khởi tạo nó để 0.

Trong C của nó không được khuyến khích để cast giá trị trả về của các chức năng này.

Trong C++, bắt buộc phải truyền.

Các vấn đề liên quan