2013-10-20 22 views
5

Tôi nhận được một lỗi bí ẩn và tôi không biết tại sao. Mã này chạy nhiều lần trước khi không thành công, và nó luôn luôn thất bại tại cùng một điểm.Bí ẩn malloc: sysmalloc: Xác nhận lỗi không thành công

Đây là mã của tôi:

assert(size > 0); 
    int* sorted = malloc(size * sizeof(int)); 

Và đây là lỗi tôi nhận được khi tôi chạy nó:

malloc.c:2369: 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. 

Tôi đã thử in ra kích thước và nó là 1 trong trường hợp này. Mã này chạy nhiều lần với các giá trị kích thước khác nhau, bao gồm 1, trước khi không thành công.

Có ai biết tôi đang làm gì sai không?

Cảm ơn.

+0

Dòng 2369 là gì? ' – ouah

+0

có thể trùng lặp của [Tại sao tôi nhận được xác nhận của lệnh malloc C?] (Http://stackoverflow.com/questions/2987207/why-do-i-get-ac-malloc- khẳng định-thất bại) –

+2

@ouah Tôi nghĩ rằng dòng này là một phần của hàm malloc, chứ không phải là một phần của mã của poster; anh ta có lẽ không có nguồn cho thư viện đó. – mah

Trả lời

6

Điều này thường xảy ra khi mã của bạn free d địa chỉ không hợp lệ tại một số thời điểm trước đó hoặc ghi qua phần cuối của khối bộ nhớ được cấp phát. Chạy mã của bạn thông qua valgrind hoặc một số bộ nhớ khác để xem điểm mà điều này xảy ra.

+0

Tôi đã thử nhận xét mỗi khi tôi sử dụng miễn phí. Tôi vẫn nhận được lỗi. – Ian

+0

@Ian Sau đó, tìm những nơi mà bạn cấp phát bộ nhớ, và xem liệu bạn có luôn cung cấp 'sizeof' đúng không, và cũng là các chỉ mục vào bộ nhớ đó là chính xác. Đây là loại lỗi nghiêm trọng nhất, rất khó để tìm chúng mà không có một bộ nhớ. – dasblinkenlight

+1

Tôi đã thử chạy mã thông qua valgrind và tôi tìm thấy một số sai lầm. Tôi sẽ cố gắng sửa chúng để xem lỗi có biến mất hay không. Cảm ơn! – Ian

Các vấn đề liên quan