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 mallocdò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 fprintfvà 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 mallocbằ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 đó.