Tôi gặp sự cố khi thực thi malloc trong mã này,
/*chức năng bắt đầu*/
if(NULL==(partial_results=(bignum_t**)malloc(sizeof(bignum_t*)*long_op2))){
trả về NULL;
}
/*khởi tạo tất cả các thành viên của mảng*/
for(i=0;i<>
(*(partial_results+i))=NULL;
}
for(i=long_op2-1;i>=0;i--){
chữ số2=op2->chữ số[i]-48;
count++;
mang=0;
if(đếm==1){
đếm2=0;
}khác{
count2=count-1;
}
/* malloc tiếp theo là cái bị lỗi*/
if(NULL==(*(partial_results+(count-1))=(bignum_t*)malloc(sizeof(bignum_t)))){
trả về NULL;
}
/*sau đó mã vẫn tiếp tục, nhưng mọi thứ từ đây đều ổn và không gây ra vấn đề gì*/
Vấn đề ở đây là mình đang cố tạo một mảng gồm các phần tử long_op2 (tức là 9), nên trong malloc đầu tiên mình tạo một mảng gồm 9 con trỏ bignum_t. Sau đó, bên trong for, tôi cố gắng tạo cấu trúc bignum_t cho từng thành viên của mảng. Khi long_op2 nhỏ hơn hoặc bằng 6, tôi không gặp vấn đề gì, nhưng khi nó lớn hơn hoặc bằng 7, malloc đầu tiên (cái được cho là tạo con trỏ) không hoạt động. Tôi nhận được lỗi,
tp3: malloc.c:2372: sysmalloc: khẳng định
(old_top == (((mbinptr) (((char *) &((av)->bins[(( 1) - 1) * 2])) - __buildin_offsetof (struct malloc_chunk, fd)))) && old_size = = 0) || ((dài không dấu) (old_size) >= (dài không dấu)((((__buildin_offsetof (struct malloc_chunk, fd_nextsize))+((2 *(sizeof(size_t))) - 1)) & ~((2 *(sizeof (size_t))) - 1))) && ((old_top)->size & 0x1) && ((dài không dấu) old_end & pagemask) == 0)' không thành công.
Hủy bỏ (kết xuất lõi)
Vấn đề là mình không muốn viết nhiều hơn số mảng đã tạo, vì nếu long_op2 là 9 thì số đếm nhiều nhất là 8 nên cũng không sao. Một điều kỳ lạ nữa là khi tôi chạy chương trình bằng Valgrind, nó thực sự hoạt động!
PD: Đây là câu hỏi đầu tiên của tôi ở đây, nên tôi xin lỗi nếu có sai sót gì.
PD2: Đây là cách chương trình hoạt động.
980581618*215129902
long_op1 & long_op2 9 9
với: i, count-1 8 0
đang làm malloc malloc xong rồi
với: i, count-1 7 1
đang làm malloc malloc xong rồi
cho với: i, đếm-1 6 2
đang làm malloc malloc xong rồi
cho với: i, đếm-1 5 3
đang làm malloc malloc xong rồi
cho với: i, đếm-1 4 4
đang làm malloc malloc xong rồi
cho với: i, đếm-1 3 5
đang làm malloc malloc xong rồi
cho với: i, đếm-1 2 6
đang làm malloc malloc xong rồi
với: i, count-1 1 7
đang làm malloc malloc xong rồi
cho với: i, đếm-1 0 8
đang làm malloc
tp3: malloc.c:2372: sysmalloc: Khẳng định ...
Đối với dòng này:
/* malloc tiếp theo là cái bị lỗi*/
if(NULL==(*(partial_results+(count-1))=(bignum_t*)malloc(sizeof(bignum_t)))){
trả về NULL;
}
Dẫu sao thì:
đếm
cần phải có 1 <= đếm <= long_op2
.nếu nó nằm ngoài phạm vi đó thì bạn sẽ nhận được kết quả không xác định. tôi không thể nhìn thấy đếm
khởi tạo, nhưng bạn nên in đếm
Giá trị của là đầu ra trước mỗi malloc.
Đây chỉ là phỏng đoán, nhưng tôi nghi ngờ bạn thực sự có ý đó:
một phần_results[i]=(bignum_t*)malloc(sizeof(bignum_t));
Tôi là một lập trình viên xuất sắc, rất giỏi!