30/09/2018, 18:21

Giúp đỡ Hàm Realloc()?

Hàm Nó Như Thế Này!

#include <stdlib.h>
 void *realloc(void *ptr, size_t size); 

Ví dụ Lúc Đầu mình khai báo *p và cấp Phát cho nó và gán tất cả =0

 int *p=0;
  p=(int*)calloc(sizeof(int),10);

Xong Mình Dùng Realloc cấp thêm 2 cái nữa.
Khi Mình Dùng như thế nào thì đúng. Không bị thây đổi dữ liệu (tức 10pt=0 và thêm 2 cái chưa gán giá trị nữa)

realloc(&p,2*sizeof(int));

Output:

0

0

0

0

0

0

0

0

0

0

1(Mới cấp phát thêm và gán =1)

1(Mới cấp phát thêm và gán =1)

Còn Khi Mình Làm như thế này thì lại bị biến đổi giá trị của mấy ptử đầu.

p=(int*)realloc(p,2*sizeof(int));

Output:

0

0

596961664 (Bị Thây Đổi)

40123(Bị Thây Đổi)

134952(Bị Thây Đổi)

131264(Bị Thây Đổi)

0

0

0

0

1 (Mới cấp phát thêm và gán =1)

1 (Mới cấp phát thêm và gán =1)

không biết mình làm sai chỗ nào nhỉ. Cái p=(int*)realloc(p,2*sizeof(int)); thì mình làm giống mẩu. thì lại sai . còn cái realloc(&p,2*sizeof(int)); làm ntn lại đúng ^^ thật khó hiểu.

Gió viết 20:33 ngày 30/09/2018

Bạn thu gọn vùng con trỏ còn 2 ô thì 2 ô đầu vẫn nguyên sau đó không phải là của p nên có thể có giá trị khác, và bạn không dc sử dụng ở đó.
Bạn sử dụng realloc( & p…) là sai vì &p != p

võ lê huy viết 20:24 ngày 30/09/2018

muốn thêm thì bạn viết vào “realloc(p, (số lượng phần tử ban đầu + số lượng muốn thêm vào) * sizeof(int));”

Bài liên quan
0