2013-10-20 15 views
5

Sto ricevendo un errore misterioso e non ho idea del perché. Questo codice viene eseguito più volte prima di fallire e fallisce sempre nello stesso punto.Malloc misterioso: sysmalloc: errore di asserzione non riuscito

Ecco il mio codice:

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

E qui è l'errore che sto ottenendo quando l'eseguo:

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. 

ho cercato di stampare dimensioni ed è 1 in questo caso. Questo codice viene eseguito più volte con diversi valori di dimensioni, incluso 1, prima di fallire.

Qualcuno ha idea di cosa sto facendo male?

Grazie.

+0

Che cos'è la riga 2369? ' – ouah

+0

possibile duplicato di [Perché viene visualizzato un errore di asserzione di malloc C?] (Http://stackoverflow.com/questions/2987207/why-do-i-get-ac-malloc- asserzione-fallimento) –

+2

@ouah Penso che quella linea sia parte della stessa funzione malloc, piuttosto che parte del codice del poster; probabilmente non ha la fonte per quella libreria. – mah

risposta

6

Ciò accade di solito quando il codice free d un indirizzo non valido in un momento precedente o ha scritto oltre la fine del blocco di memoria allocato. Esegui il tuo codice attraverso valgrind o qualche altro profiler di memoria per vedere il punto in cui ciò accade.

+0

Ho provato a commentare ogni volta che ho usato libero. Ho ancora l'errore. – Ian

+0

@Ian Quindi cerca i luoghi in cui assegni la memoria, e verifica se fornisci sempre il 'sizeof' corretto, e anche che gli indici in quella memoria sono corretti. Questo è il tipo più brutto di errori, è estremamente difficile trovarli senza un profiler di memoria. – dasblinkenlight

+1

Ho provato a eseguire il codice tramite valgrind e ho trovato alcuni errori. Proverò a risolverli per vedere se l'errore scompare. Grazie! – Ian

Problemi correlati