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 ạ?
Hỏi về cấp phát bộ nhớ trong danh sách liên kết đơn?
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
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 và struct luôn là một khối liên tục.