Menu
×

Được chứng nhận

Ghi lại kiến ​​thức của bạn

Đăng nhập Đăng ký

Tạo Tài khoản Example.com.vn miễn phí để cải thiện trải nghiệm học tập của bạn

Người tìm đường và việc học của tôi

Theo dõi tiến độ học tập của bạn tại Example.com.vn và thu thập phần thưởng

Nâng cấp

Trở thành người dùng PLUS và mở khóa các tính năng mạnh mẽ (không có quảng cáo, lưu trữ, hỗ trợ, ..)

Bắt đầu từ đâu

Bạn không chắc chắn muốn bắt đầu từ đâu? Đi theo con đường được hướng dẫn của chúng tôi

Trình chỉnh sửa mã (Dùng thử)

Với trình chỉnh sửa mã trực tuyến của chúng tôi, bạn có thể chỉnh sửa mã và xem kết quả trong trình duyệt của mình

Video

Tìm hiểu những điều cơ bản về HTML qua video hướng dẫn thú vị và hấp dẫn

Mẫu

Chúng tôi đã tạo một loạt mẫu trang web đáp ứng mà bạn có thể sử dụng - miễn phí!

Web hosting

Lưu trữ trang web của riêng bạn và chia sẻ nó với mọi người với Example.com.vn Spaces

Tạo một máy chủ

Tạo máy chủ của riêng bạn bằng Python, PHP, React.js, Node.js, Java, C#, v.v.

Làm thế nào để

Bộ sưu tập lớn các đoạn mã cho HTML, CSS và JavaScript

Khung CSS

Xây dựng các trang web nhanh và phản hồi bằng cách sử dụng khung W3.CSS miễn phí của chúng tôi

Thống kê trình duyệt

Đọc xu hướng dài hạn của việc sử dụng trình duyệt

Tốc độ gõ

Kiểm tra tốc độ đánh máy của bạn

Đào tạo AWS

Tìm hiểu dịch vụ web của Amazon

Bộ chọn màu

Sử dụng công cụ chọn màu của chúng tôi để tìm các màu RGB, HEX và HSL khác nhau. Bánh xe màu hình tròn thể hiện sự chuyển màu trong quang phổ

Trò chơi mã

Trò chơi mã hóa W3Schools! Giúp linh miêu thu thập nón thông Logo Lynx

Đặt mục tiêu

Nhận hành trình học tập được cá nhân hóa dựa trên các kỹ năng và mục tiêu hiện tại của bạn

Bản tin

Tham gia bản tin của chúng tôi và có quyền truy cập vào nội dung độc quyền mỗi tháng

Việc làm

Thuê những tài năng công nghệ hàng đầu. Hợp lý hóa quy trình tuyển dụng của bạn để có đội ngũ phù hợp hoàn hảo

Lớp học

Hãy liên hệ để sử dụng Example.com.vn Plus và các chứng chỉ với tư cách là một tổ chức giáo dục

×
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP CÁCH W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS AN NINH MẠNG DỮ LIỆU KHOA HỌC

C Phân bổ bộ nhớ


Phân bổ (miễn phí) Bộ nhớ

Khi bạn không còn cần một khối bộ nhớ nữa, bạn nên giải phóng nó. Phân bổ còn được gọi là "giải phóng" bộ nhớ.

Bộ nhớ động được giữ nguyên cho đến khi nó được giải phóng hoặc cho đến khi chương trình kết thúc.

Sau khi bộ nhớ được giải phóng, nó có thể được sử dụng bởi các chương trình khác hoặc thậm chí nó có thể được phân bổ cho một phần khác trong chương trình của bạn.


Giải phóng bộ nhớ

Để giải phóng bộ nhớ, hãy sử dụng hàm free() :

free( pointer );

Tham số con trỏ là một con trỏ tới địa chỉ của bộ nhớ cần được giải phóng:

int *ptr;
ptr = malloc(sizeof(*ptr));

free(ptr);
ptr = NULL;

Một cách thực hành tốt được coi là đặt con trỏ thành NULL sau khi giải phóng bộ nhớ để bạn không thể vô tình tiếp tục sử dụng nó.

Nếu bạn tiếp tục sử dụng bộ nhớ sau khi nó đã được giải phóng, bạn có thể làm hỏng dữ liệu từ các chương trình khác hoặc thậm chí một phần khác trong chương trình của chính bạn.

Ví dụ

Một ví dụ hoạt động bao gồm kiểm tra lỗi và giải phóng:

int *ptr;
ptr = malloc(sizeof(*ptr)); // Allocate memory for one integer

// If memory cannot be allocated, print a message and end the main() function
if (ptr == NULL) {
  printf("Unable to allocate memory");
  return 1;
}

// Set the value of the integer
*ptr = 20;

// Print the integer value
printf("Integer value: %d\n", *ptr);

// Free allocated memory
free(ptr);

// Set the pointer to NULL to prevent it from being accidentally used
ptr = NULL;
Hãy tự mình thử »

Rò rỉ bộ nhớ

Rò rỉ bộ nhớ xảy ra khi bộ nhớ động được cấp phát nhưng không bao giờ được giải phóng.

Nếu rò rỉ bộ nhớ xảy ra trong một vòng lặp hoặc trong một hàm được gọi thường xuyên, nó có thể chiếm quá nhiều bộ nhớ và khiến máy tính chạy chậm lại.

Có nguy cơ rò rỉ bộ nhớ nếu con trỏ tới bộ nhớ động bị mất trước khi bộ nhớ có thể được giải phóng. Điều này có thể xảy ra một cách tình cờ, vì vậy điều quan trọng là phải cẩn thận và theo dõi các con trỏ tới bộ nhớ động.

Dưới đây là một số ví dụ về cách con trỏ tới bộ nhớ động có thể bị mất.

ví dụ 1

Con trỏ bị ghi đè:

int x = 5;
int *ptr;
ptr = calloc(2, sizeof(*ptr));
ptr = &x;

Trong ví dụ này, sau khi con trỏ được thay đổi thành điểm x , bộ nhớ được cấp phát bởi calloc() không thể truy cập được nữa.

Ví dụ 2

Con trỏ chỉ tồn tại bên trong một hàm:

void myFunction() {
  int *ptr;
  ptr = malloc(sizeof(*ptr));
}

int main() {
  myFunction();
  printf("The function has ended");
  return 0;
}

Trong ví dụ này, bộ nhớ được phân bổ bên trong hàm vẫn được phân bổ sau khi hàm kết thúc nhưng không thể truy cập được nữa. Một cách để ngăn chặn vấn đề này là giải phóng bộ nhớ trước khi chức năng kết thúc.

Ví dụ 3

Con trỏ bị mất khi việc phân bổ lại không thành công:

int* ptr;
ptr = malloc(sizeof(*ptr));
ptr = realloc(ptr, 2*sizeof(*ptr));

Nếu realloc() không thể phân bổ lại bộ nhớ, nó sẽ trả về con trỏ NULL và bộ nhớ gốc sẽ được giữ nguyên.

Trong ví dụ này, nếu realloc() thất bại thì con trỏ NULL được gán cho biến ptr , ghi đè địa chỉ bộ nhớ gốc để không thể truy cập được nữa.


Bản tóm tắt

Tóm lại, khi quản lý bộ nhớ trong C, hãy sử dụng các phương pháp hay nhất:

  1. Hãy nhớ kiểm tra lỗi (giá trị trả về NULL ) để biết việc cấp phát bộ nhớ có thành công hay không
  2. Ngăn chặn rò rỉ bộ nhớ - luôn nhớ giải phóng bộ nhớ không còn được sử dụng, nếu không chương trình có thể hoạt động kém hoặc thậm chí tệ hơn là bị treo nếu hết bộ nhớ
  3. Đặt con trỏ thành NULL sau khi giải phóng bộ nhớ để bạn không thể vô tình tiếp tục sử dụng nó



×

Liên hệ bán hàng

Nếu bạn muốn sử dụng dịch vụ của Example.com.vn với tư cách là một tổ chức giáo dục, nhóm hoặc doanh nghiệp, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Báo cáo lỗi

Nếu bạn muốn báo cáo lỗi hoặc nếu bạn muốn đưa ra đề xuất, hãy gửi email cho chúng tôi:
[email được bảo vệ]

Example.com.vn được tối ưu hóa cho việc học tập và đào tạo. Các ví dụ có thể được đơn giản hóa để cải thiện khả năng đọc và học. Các hướng dẫn, tài liệu tham khảo và ví dụ liên tục được xem xét để tránh sai sót, nhưng chúng tôi không thể đảm bảo tính chính xác hoàn toàn của mọi nội dung. Khi sử dụng W3Schools, bạn đồng ý đã đọc và chấp nhận các điều khoản sử dụng , chính sách cookie và quyền riêng tư của chúng tôi.

Bản quyền 1999-2024 của Refsnes Data. Đã đăng ký Bản quyền. Example.com.vn được cung cấp bởi W3.CSS .