cuốn sách gpt4 ai đã làm

c - Câu hỏi cơ bản: Hàm C trả về con trỏ tới cấu trúc malloc'ed

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 00:55:11 26 4
mua khóa gpt4 Nike

Về cấu trúc và con trỏ C...

Hôm qua tôi đã viết đoạn mã sau (cố gắng nhớ một phần của nó từ trí nhớ của mình):

    cấu trúc typedef {
iFrames int ngắn không dấu;
unsigned short int* iTime; // mảng có các phần tử [0..x] giữ thời gian cho mỗi khung hình
} Ngói;

Ngói* LoadTile(char* sFile)
{
// mong muốn khai báo đủ không gian cho một cấu trúc Ngói hoàn chỉnh, trong đó địa chỉ bộ nhớ cơ sở được lưu trong con trỏ tmpResult
Ngói* tmpResult = malloc(sizeof(Tile));

// thực hiện những việc đặt giá trị cho thực thể Tile
// ...

// trả về con trỏ để sử dụng tiếp
trả về tmpResult;
}

khoảng trống chính()
{
// xác định một con trỏ ô và đặt giá trị của nó thành con trỏ được trả về (điều này cũng nên được cho phép trong một hàng)
// Dự kiến ​​​​sẽ nhận GIÁ TRỊ của con trỏ - tức là địa chỉ bộ nhớ cơ sở tại nơi malloc tạo không gian trống
Ngói* tmpTile;
tmpTile = LoadTile("tile1.dat");

// lấy/đặt các phần tử của ô
// ...

// giải phóng ô xếp
miễn phí(tmpTile);
}

Những gì tôi thấy: Tôi có thể sử dụng cấu trúc Ngói được sắp xếp bên trong hàm, nhưng ngay khi tôi cố gắng truy cập nó trong Main, tôi nhận được lỗi từ Visual Studio về vùng heap (nó cho tôi biết rằng có thứ gì đó đã được giải phóng sau khi cuộc gọi quay trở lại) .

Nếu tôi thay đổi nó để tôi sắp xếp khoảng trắng trong Main và chuyển một con trỏ tới khoảng trống đó dưới dạng tham số cho hàm LoadTile (để hàm không trả về bất cứ thứ gì nữa) thì nó sẽ hoạt động, nhưng tôi tin rằng tôi cũng có thể làm được điều đó. có chức năng LoadTile Phân bổ không gian và trả về một con trỏ tới không gian đó không? !

Cảm ơn!!

câu trả lời hay nhất

Không có gì sai với những gì bạn đang cố gắng thực hiện hoặc ít nhất không có gì sai với mã ở đây. Tuy nhiên, tôi lo lắng về dòng này:

unsigned short int* iTime; // mảng có các phần tử [0..x] giữ thời gian cho mỗi khung hình

Điều này không đúng trừ khi bạnMà cònPhân bổ iTime ở đâu đó:

Ngói* tmpResult = malloc(sizeof(Tile));
tmpResult->iTime = malloc(sizeof(short) * n);

Nó cần được giải phóng khi làm sạch:

miễn phí(tmpTile->iTime);
miễn phí(tmpTile);

Về c - câu hỏi cơ bản: Hàm C trả về con trỏ tới cấu trúc malloc'ed, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/5327012/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress