2013-10-20 3 views
5

신비한 오류가 발생했으며 이유가 없습니다. 이 코드는 실패하기 전에 여러 번 실행되며 항상 동일한 지점에서 실패합니다.신비한 malloc : sysmalloc : 어설 션 오류가 발생했습니다.

여기 내 코드입니다 :

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

그리고 여기에 내가 그것을 실행할 때 나는 점점 오전 오류입니다 :

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. 

내가 크기를 인쇄 시도하며,이 경우 1입니다. 이 코드는 실패하기 전에 1을 포함한 다양한 크기 값으로 여러 번 실행됩니다.

내가 뭘 잘못하고 있는지 알 수있는 사람이 있습니까?

감사합니다.

+0

라인 2369 란 무엇입니까? – ouah

+0

가능한 복제본 [Cmalloc 어설 션 오류가 발생하는 이유는 무엇입니까?] (http://stackoverflow.com/questions/2987207/why-do-i-get-ac-malloc- assertion-failure) –

+2

@ouah 나는 줄이 포스터의 코드의 일부가 아니라 malloc 함수의 일부라고 생각한다. 아마 그 도서관에 대한 자료가 없을 것입니다. – mah

답변

6

일반적으로 코드 free d에 잘못된 주소가 있거나 이전에 할당 된 메모리 블록의 끝을 지나치는 경우 발생합니다. valgrind 또는 다른 메모리 프로파일 러를 통해 코드를 실행하여 이런 일이 발생하는 지점을 확인하십시오.

+0

무료로 사용할 때마다 주석을 달았습니다. 나는 여전히 오류가 발생합니다. – Ian

+0

@Ian 그런 다음 메모리를 할당하는 장소를 찾고 정확한 'sizeof'를 제공하는지 확인하고 해당 메모리에 대한 색인이 올바른지 확인하십시오. 이것은 가장 이상한 종류의 오류입니다. 메모리 프로파일 러없이 찾을 수 없습니다. – dasblinkenlight

+1

나는 valgrind를 통해 코드를 실행하려고 시도했지만 몇 가지 실수를 발견했습니다. 오류가 사라지는 지 확인하기 위해 오류를 수정하려고합니다. 감사! – Ian

관련 문제