Hỏi về cấp phát bộ nhớ trong danh sách liên kết đơn?

cho mình hỏi là theo mình được biết thì con trỏ thường được lưu trong phân vùng heap. các biến khác không phải static và global thì thường được lưu trong phân vùng stack. vậy một node có kiểu dữ liệu struct khi nó được khai báo thì máy tính cấp phát cho nó hai vùng nhớ liền kề nhau ở phân vùng nào ạ? hay một vùng ở stack. một vùng ở heap ạ?

bạn nên phân biệt rõ ràng giữa heap và stack.
cũng là con trỏ, nhưng khi bạn dùng với new hoặc malloc() thì nó sẽ phân bổ một vùng bộ nhớ ở trong heap, và khi đó, bạn cần phải gọi free() khi bạn ko dùng đến vùng bộ nhớ đó nữa. còn khi bạn dùng với alloca() thì sẽ phân bổ trong stack, và nó sẽ tự động free vùng nhớ cho bạn khi function gọi alloca() returns.
quay lại câu hỏi của bạn, vậy 1 struct chứa cả biến và con trỏ thì khi khai báo máy tính sẽ cấp phát cho nó dựa vào cách bạn cấp phát bộ nhớ động
new, malloc() : struct được cấp phát trong heap
alloca() : trong stack

2 Likes

Cho mình hỏi là nếu 1 struct { int x. Int *p=&x || int *p=NULL } thì còn trỏ vẫn đk khai báo trong stack ạ bạn. Thanks you

Bạn đã nhầm cách cấp phát với kiểu dữ liệu. Bản thân con trỏ và vùng nhớ nó trỏ đến là hai phạm trù khác nhau :smiley: và struct luôn là một khối liên tục.

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?