What will be printed by the code below?

4 phương ánCó giải thích
Đề bài
#include <stdio.h>
#include <stdlib.h>
int main() {
    int *p = (int*) malloc(sizeof(int));
    *p = 50;
    printf("%d", *p);
    free(p);
    return 0;
}

Các phương án trả lời

Chọn một phương án
Lời giảiChọn phương án để mở
Đáp án đúng: "50". Lời gọi malloc xin một khối nhớ vừa đủ cho một int và trả về địa chỉ khối đó, p giữ địa chỉ này. Lệnh *p = 50 ghi số 50 vào chính khối vừa xin, nên khi printf đọc *p nó lấy ra 50. Thứ tự các lệnh là điều cốt yếu: giá trị được in trước, chỉ sau đó free mới trả khối nhớ về cho hệ thống, nên không có chuyện đọc vào vùng đã giải phóng. Ý "Address of p" sai vì đặc tả %d đi với *p, tức là nội dung tại địa chỉ, chứ không phải bản thân địa chỉ. Ý "Garbage value" sai vì malloc đúng là không xoá vùng nhớ, nhưng ô đó đã được gán tường minh trước khi đọc. Ý "Compilation error" sai vì mã đã nạp stdlib.h cho malloc và ép kiểu con trỏ trả về đúng cách, mọi lệnh đều hợp lệ.

Cùng phần 5

Xuất hiện trong 1 bộ đề