cuốn sách gpt4 ai đã làm

c - Giải thích cách hoạt động của free() trong C -

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 00:25:56 hai mươi bốn 4
mua khóa gpt4 Nike

Câu hỏi của tôi là khi nào thì thích hợp để sử dụng free() trong C. Tôi đang sử dụng gcc 4.3.2.

Giả sử, nếu bạn phải giải phóng một loạt bộ nhớ trong danh sách liên kết, giải pháp lý tưởng sẽ là (tôi đoán vậy):

int freeLL(nút *a)
{
if(a->next != NULL)
freeLL(a->next);
miễn phí(a);
return 0;
}

Bây giờ, giả sử tôi muốn làm điều gì đó tương tự với ADT sau:

Một con trỏ "VertexNode", cũng có 2 con trỏ: "Vertex" và "Edge" (giả sử). Tương đương với câu nói:

cấu trúc đỉnh đỉnh
{
đỉnh *v;
cạnh *e;
}
typedef struct vertexnode* VertexNode;

Sau này, khi khởi tạo một phiên bản, tôi làm điều gì đó như -

VertexNode V = malloc(sizeof(struct vertexnode));
V->v = malloc(sizeof(đỉnh));

Vì vậy, cuối cùng khi phát hành: Tôi đã sử dụng phép loại suy tương tự như danh sách liên kết.

miễn phí(V->v);
miễn phí(V);

Điều này gây ra lỗi thời gian chạy, khi tôi nhận xét "free(V->v)" thì chương trình vẫn chạy tốt. Câu hỏi của tôi là:

a) Chỉ làm free(V) có đủ không? Ý tôi là, free() có hoạt động đệ quy cho tất cả các con trỏ trong một con trỏ nhất định không?

b) Nếu không, có rò rỉ bộ nhớ trong trường hợp này không? Làm thế nào tôi có thể ngăn chặn điều này xảy ra một cách lý tưởng?

c) Cuối cùng, có cách nào để theo dõi số byte được phân bổ bởi malloc() và có bao nhiêu byte trong số đó được free()?

Xin lỗi vì đã hỏi một câu hỏi dài như vậy. Cảm ơn bạn trước vì thời gian và sự kiên nhẫn của bạn.

câu trả lời hay nhất

Không, miễn phí không hoạt động đệ quy, do đó bạn sẽ bị rò rỉ bộ nhớ. Lỗi thời gian chạy mà bạn đang gặp phải có thể liên quan đến lỗi logic (có thể V->v Đúng NULL Hoặc bạn đã không phân bổ nó trước khi giải phóng nó).

Nếu bạn đang sử dụng Linux, việc sử dụng valgrind có thể giúp bạn phân tích chương trình của mình và đề cập đến các lỗi rò rỉ. sử dụng cc*.c-ggdb Biên dịch và chạyvalgrind --leakcheck=đầy đủ ./a.out Một lỗi rò rỉ sẽ được xuất ra.

Về c - giải thích về cách hoạt động của free() trong C -, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/13645452/

hai mươi bốn 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress