
Nguyên bản được gửi bởi
green3r
Mình muốn hỏi phần cấp phát bộ nhớ cho con trỏ.
Khi muốn giải phóng vùng nhớ con trỏ thì gặp 3 hàm này có ai trả lời cho mình biết công dụng của mỗi hàm ko
Code:
int *p;
free(p);
delete(p);
p=0;
cả 3 cái bạn nói đều được dùng để giải phóng bộ nhớ cho một con trỏ được cấp phát từ trước.
thằng delete là một mở rộng thêm của C++;
thằng free là một thành phần của C;
2 thằng free và delete không có gì khác nhau về chức năng nhưng mình thường dùng chúng với cặp như sau: dùng delete khi dùng new để cấp phát, và dùng free khi dùng malloc để cấp phát;
cái thằng delete hay free sau khi thực thi dòng lệnh này rồi thì vẫn dùng được lại biến đó;
ví như:
Code:
int *p;
p = new int;
*p = 10;
printf("%d",*p);
delete p;
*p = 100;
printf("\nhello\n %d",*p);
và chương trình của bạn chạy ngọt;
cái thứ 3 là: p=0;(thằng này tương đương với câu lệnh: p=NULL
thì cái thằng này người ta ít dùng nó nên nó không thông dụng bằng 2 thằng kia
(cái này chưa hiểu vì sao người ta không thích dùng. có lẽ vì truy cập trực tiếp vào bộ nhớ.).
và nếu viết như trên thì chương trình của bạn sẽ "Đi bán muối"
ngay lập tức:
Code:
int *p;
p = new int;
*p = 10;
printf("%d",*p);
delete p;
*p = 100;
printf("\nhello\n %d",*p);
mà phải cấp phát lại cho *p;
đoạn code trên viết lại như sau:
Code:
int *p;
p = new int;
*p = 10;
printf("%d",*p);
p = 0;//=null;
p = new int;
*p = 100;
printf("\nhello\n %d",*p);
p = 0;