Tôi đang triển khai thuật toán đa thức và phân chia để đánh bại, vì vậy tôi có thể đánh giá nó so với triển khai OpenCL, nhưng tôi không thể nhận được malloc
để hoạt động. Khi tôi chạy chương trình, nó phân bổ một loạt các công cụ, kiểm tra một số thứ, sau đó gửi size/2
đến thuật toán. Sau đó, khi tôi nhấn dòng malloc
một lần nữa nó spits ra này:Tại sao tôi nhận được xác nhận của lệnh malloc C?
malloc.c: 3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) & ((av) - > thùng [((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) & & old_size == 0) || ((unsigned long) (old_size)> = (unsigned long) ((((__ builtin_offsetof (struct malloc_chunk, fd_nextsize)) + ((2 * (sizeof (size_t))) - 1)) & ~ ((2 * (sizeof (size_t))) - 1))) & & ((old_top) -> kích thước & 0x1) & & ((chưa ký dài) old_end & pagemask) == 0) 'không thành công. Aborted
Các dòng trong câu hỏi là:
int *mult(int size, int *a, int *b) {
int *out,i, j, *tmp1, *tmp2, *tmp3, *tmpa1, *tmpa2, *tmpb1, *tmpb2,d, *res1, *res2;
fprintf(stdout, "size: %d\n", size);
out = (int *)malloc(sizeof(int) * size * 2);
}
Tôi đã kiểm tra kích thước với một fprintf
, và nó là một số nguyên dương (thường là 50 vào thời điểm đó). Tôi đã thử gọi số malloc
với số đơn giản và tôi vẫn gặp lỗi. Tôi chỉ bối rối với những gì đang xảy ra, và không có gì từ Google tôi đã tìm thấy cho đến nay là hữu ích.
Bất kỳ ý tưởng gì đang xảy ra? Tôi đang cố gắng tìm ra cách để biên dịch một GCC mới hơn trong trường hợp đó là một lỗi trình biên dịch, nhưng tôi thực sự nghi ngờ nó.
tôi nghi ngờ vấn đề thực sự là một dòng trước đó. Có lẽ một đôi miễn phí? –
dòng thứ 3 trong chương trình: int * mult (kích thước int, int * a, int * b) { \t int * ra, i, j, * tmp1, * tmp2, * tmp3, * tmpa1 , * tmpa2, * tmpb1, * tmpb2, d, * res1, * res2; \t fprintf (stdout, "size:% d \ n", size); \t \t out = (int *) malloc (sizeof (int) * size * 2); – Chris