Không hiểu tác dụng của Realloc trong trường hợp này

Chào m.n mình có làm 1 bài tập trên mạng, họ cho sẵn 1 đoạn code rồi mình hoàn thành bài tập đó.
nhưng có 1 đoan mình không hiểu cho lắm

int n;
    scanf("%d", &n);
  
    char** arr;
	arr = (char**)malloc(n * sizeof(char*));
  
    for(int i = 0; i < n; i++){
        *(arr + i) = malloc(1024 * sizeof(char));
        scanf("%s", *(arr + i));
        *(arr + i) = realloc(*(arr + i), strlen(*(arr + i)) + 1);
    }

Ơ chỗ realloc mình hiểu là n đang bổ dung ô nhớ cho *(arr+i) nhưng mình không hiểu làm vậy đc ích gì?. Vd: i = 0, nhập chuỗi xong nó lại cấp phát thêm cho *(arr + 0) (strlen(*(arr + i)) + 1) ô nhớ. Ai giải thích giùm mình đc k ạ?. Mình cảm ơn!

theo mình hiểu thì nó cấp lại bộ nhớ sao vừa đủ cho chuỗi vừa nhập vào thôi, vì ban đầu nó cấp phát có thể sẽ bị thừa bộ nhớ mà không sử dụng hết.

2 Likes

À chắc vậy r. thanks b nhé

Như vầy là không đúng :smiley: nhập 1 phát nó sẽ tràn ra ngoài là hỏng, đọc từ từ thôi. Tức là câu realloc kế sau là vô nghĩa vì bị crash rồi.

2 Likes

Hi Harry Stormborn.
Về ý tương thì là tốt khi dùng bao nhiều cấp phát từng ấy. Tuy nhiên hơi có một chút vấn đề ở việc cấp phát lại. Thay vì dùng một vung nhớ thì có thể dùng 2 vùng nhớ sẽ giảm được số lần cấp phát xuông.

cache = maclloc(1024 char);
for:
   scanf(cache);
   value = maloc(len(cache) + 1 char);
   copymem(value, cache);
1 Like

C.ơn b nhiều. Mình hiểu r :))

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?