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.
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
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));”