Я реализую деление и завоевываю полиномиальный алгоритм, таким образом, я могу сравнить его с реализацией OpenCL, но я не могу добраться malloc
работать. Когда я запускаю программу, она выделяет набор материала, проверяет некоторые вещи, затем отправляет size/2
к алгоритму. Затем, когда я совершил нападки malloc
выровняйте снова, это выкладывает это:
malloc.c:3096: sYSMALLOc: Утверждение' (old_top == (((mbinptr) (((символ *) и (av)-> мусорные ведра [((1) - 1) * 2])) - __ builtin_offsetof (структура malloc_chunk, fd)))) && old_size == 0) || ((неподписанный длинный) (old_size)> = (неподписанный длинный) ((((__ builtin_offsetof (структура malloc_chunk, fd_nextsize)) + ((2 * (sizeof (size_t))) - 1)) и ~ ((2 * (sizeof (size_t))) - 1))) && ((old_top)-> размер и 0x1) && ((неподписанный длинный) old_end и pagemask) == 0)' перестало работать. Прерванный
Рассматриваемая строка:
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);
}
Я проверил размер с a fprintf
, и это - положительное целое число (обычно 50 в той точке). Я пытался звонить malloc
с простым числом также и я все еще получаю ошибку. Я просто озадачен в том, что продолжается, и ничто от Google, который я нашел, до сих пор полезно.
Какие-либо идеи, что продолжается? Я пытаюсь выяснить, как скомпилировать более новый GCC в случае, если это - ошибка компилятора, но я действительно сомневаюсь относительно этого.
Вероятность 99,9%, что вы испортили память (переполнение или недостаточное заполнение буфера, запись в указатель после его освобождения, вызов освобождения дважды для одного и того же указателя и т. Д. )
Запустите свой код под Valgrind , чтобы увидеть, где ваша программа сделала что-то неправильно.
Возможно, вы где-то выходите за пределы выделенной памяти. тогда базовый sw не поймет это, пока вы не вызовете malloc
Возможно, есть значение guard, которое перехватывается malloc.
edit...added this for bounds checking help
http://www.lrde.epita.fr/~akim/ccmp/doc/bounds-checking.html