Realloc trong C
Chào mọi người,
Em viết 1 chương trình C thuần túy. Đọc dữ liệu từ file .txt. Trong file (.txt) này là những con số Hexa 8-bit. Vd: 1A 2E 8F…
Mỗi lần đọc 1 số thì em thêm vào phần tử đuổi của mảng bằng lệnh realloc để resize lại kịch thước của mảng. Em dùng Visual Studio. Khi sử dụng trình Debug thì không báo lỗi, nhưng khi dùng Release thì bị lỗi nó ra 1 cái bảng Warming rồi bắt break, không chạy được. Em nghĩ là do truy cập vào vùng nhờ chưa được cấp phát. Mọi người xem giúp em với.
int main(int argc, char *argv[]) {
FILE *FileIn;
int i, temp;
int *A, nA = 0;
A = (int *)realloc(NULL, sizeof(int));
FileIn = fopen("test.txt", "r");
fscanf(FileIn, "%x", &temp);
A[0] = temp;
nA++;
for(i = 0; i < 16; ++i){
fscanf(FileIn, "%x", &temp);
addValue(A, &nA, temp);
}
for (i = 0; i < 16; ++i) {
printf("A[%d] = %x
", i, A[i]);
}
free(A);
system("pause");
return 0;
}
void addValue(int *A, int *n, int Data)
{
A = (int *)realloc(A, (*n+1)*sizeof(int *));
A[*n] = Data;
(*n)++;
}
Mình chỉ show kết quả thôi nhé:
Relase:
Debug:
ủa chứ bạn không biết câu trả lời hả =))
Ờ cái debug không chạy được là do bạn thiếu file test.txt thì phải. Mình chẳng biết chương trình này sai chỗ nào :’(
Mình không học C nên cũng chẳng biết nó sai chỗ nào, chỉ là xem có giúp được gì không thôi í mà.
Thật ra cái có vấn đề là hàm
addValue
. Vì bạn dùngrealloc
thì sau đó nó sẽ xin HĐH cấp 1 vùng nhớ khác có kích thước lớn hơn hoặc bằng cái bạn muốn, vì nó là vùng nhớ khác nên mọi thao tác làm thay đổi vùng nhớ này sẽ không ảnh hưởng đến mảng đầu vào, dễ hiểu hơn: không thể dùng kiểu tham biến. Giải pháp, sau khi thay đổi giá trị, return mảng A.Tại phần vòng lặp nhập giá trị, vì không lúc nào FileIn cũng đủ 16 số cho bạn, nên bạn dùng while và feof để kiểm tra:
Code đã chỉnh sửa
Chuẩn rồi. Cảm ơn bạn nhé