1) Xử lý bộ nhớ động không được thực hiện bởi trình biên dịch. Có các thư viện thời gian chạy để giải quyết vấn đề này. Ví dụ: : glibc cung cấp các API như malloc và miễn phí, trong đó thực hiện các cuộc gọi hệ thống (sys_brk) để xử lý vùng heap.
2) Giải phóng bộ nhớ giống nhau hai lần đề cập đến một điều kiện như sau: Giả sử bạn có char * cptr;
Bạn cấp phát bộ nhớ bằng cách sử dụng: cptr = (char *) malloc (SIZE);
Bây giờ, khi bạn không còn cần bộ nhớ này nữa, bạn có thể giải phóng bộ nhớ bằng cách sử dụng: miễn phí (cptr);
Bây giờ ở đây điều gì xảy ra là bộ nhớ được trỏ tới bởi cptr là miễn phí để sử dụng.
Giả sử tại một thời điểm sau đó trong chương trình bạn lại gọi miễn phí (cptr), thì đây không phải là điều kiện hợp lệ. Kịch bản này, nơi bạn đang giải phóng cùng một bộ nhớ hai lần được biết là vấn đề "giải phóng bộ nhớ hai lần ".`
Không có bộ nhớ nào được giải phóng khi bạn giải phóng con trỏ rỗng. Nếu bạn giải phóng con trỏ * không null * hai lần, bộ nhớ được giải phóng hai lần và đó là một vấn đề. – jalf