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

C - realloc không phản ánh trở lại chính

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

Tôi hiện đang tìm hiểu cách hoạt động của quản lý bộ nhớ động, cụ thể hơn là realloc và cách thực hiện trong các hàm.

Trong chương trình bên dưới, tôi chỉ đang cố gắng sử dụng malloc để phân bổ một số số trong hàm a() và sau đó chuyển chúng sang hàm b() khác. Trong b() tôi chuyển địa chỉ của con trỏ tới c() để bộ nhớ được phân bổ lại kích thước gấp đôi và được khởi tạo bằng một số.

Bây giờ quay lại câu hỏi của tôi: tại sao kết quả đầu ra trong hàm b() hiển thị các số chính xác nhưng không hiển thị trong hàm chính? Không phải con trỏ "số" trong main cũng trỏ đến bộ nhớ được phân bổ lại sao?

Cảm ơn trước.

Mã số:

#include 
#include

#xác định KÍCH THƯỚC 3

int a(int **số);
int b(int *số);
int c(int **số);

int main()
{
int *số = NULL;

a(&số);

for(size_t i = 0; i < 2 * SIZE; i++)
printf("Trong main sau a: %i\n", number[i]);

b(số);

for(size_t i = 0; i < 2 * SIZE; i++)
printf("Trong main sau b: %i\n", number[i]);

return 0;
}

int a(int **số)
{
*số = malloc(KÍCH THƯỚC * sizeof(số));
nếu(!số)
{
miễn phí(số);
return -1;
}


for(size_t i = 0; i < SIZE; i++)
(*số)[i] = i;

return 0;
}

int b(int *số)
{
c(&số);

for(size_t i = 0; i < 2 * SIZE; i++)
printf("Trong b sau c: %i\n", number[i]);

return 0;
}

int c(int **số)
{
int *n_new = realloc(*số, 2 * SIZE * sizeof(số));
nếu(!n_new)
{
miễn phí(n_new);
return -1;
}

for(size_t i = 0; i < 2 * SIZE; i++)
n_new[i] = i * 2;

*số = n_new;

return 0;
}

Đầu ra:

Trong chính sau a: 0
Trong chính sau a: 1
Trong chính sau a: 2
Trong chính sau a: 0
Trong chính sau a: 0
Trong chính sau a: 0
Trong b sau c: 0
Trong b sau c: 2
Trong b sau c: 4
Trong b sau c: 6
Trong b sau c: 8
Trong b sau c: 10
Trong chính sau b: 0
Trong chính sau b: 0
Trong chính sau b: 2
Trong chính sau b: 0
Trong chính sau b: 0
Trong chính sau b: 0

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

Bạn cũng cần chuyển từng con trỏ tới b(). Hiện tại, hãy gọi b(con trỏ) không thể sửa đổi chủ yếu() con trỏ trong . gọi với a(&con trỏ) Thực hiện theo cách tương tự.

Ngoài ra, đừng gọi một con trỏ mà bạn biết là null miễn phí()(khi malloc thất bại). Nó không làm gì cả.

Về C - realloc không phản ánh trở lại chính, 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/38423468/

27 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