Почему я получаю C malloc отказ утверждения?

Я реализую деление и завоевываю полиномиальный алгоритм, таким образом, я могу сравнить его с реализацией 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 в случае, если это - ошибка компилятора, но я действительно сомневаюсь относительно этого.

71
задан P Shved 19 September 2011 в 09:22
поделиться

2 ответа

Вероятность 99,9%, что вы испортили память (переполнение или недостаточное заполнение буфера, запись в указатель после его освобождения, вызов освобождения дважды для одного и того же указателя и т. Д. )

Запустите свой код под Valgrind , чтобы увидеть, где ваша программа сделала что-то неправильно.

84
ответ дан 24 November 2019 в 12:57
поделиться

Возможно, вы где-то выходите за пределы выделенной памяти. тогда базовый sw не поймет это, пока вы не вызовете malloc

Возможно, есть значение guard, которое перехватывается malloc.

edit...added this for bounds checking help

http://www.lrde.epita.fr/~akim/ccmp/doc/bounds-checking.html

2
ответ дан 24 November 2019 в 12:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: