Sto implementando un algoritmo polinomiale di divisione e conquista in modo da poterlo confrontare con un'implementazione OpenCL, ma non riesco a far funzionare malloc
. Quando eseguo il programma, assegna un sacco di cose, controlla alcune cose, quindi invia l'algoritmo al numero size/2
. Poi, quando mi ha colpito di nuovo la linea malloc
sputa fuori questo:Perché viene visualizzato un errore di asserzione di malloc C?
malloc.c: 3096: sYSMALLOc: Asserzione `(old_top == (((mbinptr) (((char *) & ((AV) - > bidoni [((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) -> dimensione & 0x1) & & ((unsigned long) old_end & pagemask) == 0)' fallito. interrotta
La linea in questione è:
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);
}
ho controllato dimensioni con un fprintf
, ed è un numero intero positivo (di solito 50 a questo punto). Ho provato a chiamare malloc
con un numero normale e ho ancora ricevuto l'errore. Sono solo perplesso su quello che sta succedendo, e nulla da Google che ho trovato finora è utile.
Qualche idea cosa sta succedendo? Sto cercando di capire come compilare un GCC più recente nel caso si tratti di un errore del compilatore, ma ne dubito davvero.
ho il sospetto che il problema sia in realtà una linea prima di quella. Forse un doppio libero? –
3a linea nel programma: int * mult (int size, int * a, int * b) { \t int * fuori, i, j, * tmp1, * tmp2, * TMP3, * tmpa1 , * tmpa2, * tmpb1, * tmpb2, d, * res1, * res2; \t fprintf (stdout, "dimensione:% d \ n", dimensione); \t \t out = (int *) malloc (sizeof (int) * size * 2); – Chris