Đề bài
Viết chương trình C hiển thị và cộng các phần tử dùng hàm cấp phát bộ nhớ động.
Giải pháp
Trong C, hàm thư viện malloc cấp phát khối bộ nhớ tính bằng byte tại runtime. Trả về con trỏ void trỏ đến địa chỉ cơ sở của bộ nhớ đã cấp phát, để bộ nhớ chưa khởi tạo.
Cú pháp
void *malloc(size_t size_in_bytes)
Ví dụ:
int *ptr; ptr = (int*)malloc(1000);int *ptr; ptr = (int*)malloc(n * sizeof(int));
Lưu ý: Trả về NULL nếu không đủ bộ nhớ.
Chương trình mẫu
#include <stdio.h>
#include <stdlib.h>
void main() {
int numofe, i, sum = 0;
int *p;
printf("Nhập số lượng phần tử: ");
scanf("%d", &numofe);
// Cấp phát động
p = (int*)malloc(numofe * sizeof(int));
// Kiểm tra cấp phát thành công
if (p == NULL) {
printf("Không đủ bộ nhớ\n");
exit(0);
}
printf("Nhập các phần tử:\n");
for(i = 0; i < numofe; i++) {
scanf("%d", p + i);
sum += *(p + i);
}
printf("\nTổng các phần tử: %d\n", sum);
free(p); // Giải phóng bộ nhớ
printf("\nHiển thị vùng nhớ sau khi free:\n");
for(i = 0; i < numofe; i++) {
printf("%d\n", p[i]); // Giá trị rác
}
}
Kết quả chạy
Nhập số lượng phần tử: 5
Nhập các phần tử:
23 45 65 12 23
Tổng các phần tử: 168
Hiển thị vùng nhớ sau khi free:
10753152
0
10748240
0
23