Tôi đang triển khai một thuật toán đa thức chia và chinh phục để tôi có thể so sánh nó với việc triển khai OpenCL, nhưng tôi không thể bắt malloc
đầu. Khi tôi chạy chương trình, nó sẽ phân bổ một loạt nội dung, kiểm tra một số thứ, sau đó gửi size/2
đến thuật toán. Sau đó, khi tôi nhấn vào malloc
dòng một lần nữa, nó phát ra điều này:
malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr) (((char *) &((av)->bins[((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)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
Aborted
Dòng được đề cập 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 bằng a fprintf
và nó là một số nguyên dương (thường là 50 tại thời điểm đó). Tôi cũng đã thử gọi malloc
bằng một 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 mà tôi thấy cho đến nay là hữu ích.
Bất kỳ ý tưởng những gì đang xảy ra? Tôi đang cố gắng tìm cách biên dịch GCC mới hơn trong trường hợp đó là lỗi trình biên dịch, nhưng tôi thực sự nghi ngờ điều đó.