Я пытаюсь получить двоичное представление большого целого в GMP. Я сохраняю 1 и 0 в массиве с именем expBinary. Я использую malloc для выделения памяти размера «int», затем используйте realloc, чтобы увеличить эту память всякий раз, когда добавляется новый бит. Преобразование работает без каких-либо проблем, но когда я пытаюсь выделить больше памяти с помощью malloc после цикла while, он дает мне ошибка сегментации, когда я вызываю тот же код второй раз, первый раз это дает мне отсутствие сегментации. Я проверил и «expBinary» это что-то из границ не хранить, я дал ниже кодОшибка распределения памяти в C
int binarySize = 0;
int * expBinary = malloc(sizeof(int));
int i = 0;
// Run until exp == 0
while(mpz_cmp_ui(exp,0) != 0)
{
binarySize++;
expBinary = (int*) realloc(expBinary,(binarySize));
// Getting LSB of exp
if(mpz_even_p(exp) != 0)
expBinary[i] = 0;
else
expBinary[i] = 1;
// Incrmenting variables
i++;
// Dividing exponent by 2
mpz_tdiv_q_ui(exp,exp,2);
}
// This line is giving error
int * temp = malloc(sizeof(int));
Это на linux? use [valgrind] (http://www.valgrind.org) –
[Пожалуйста, не накладывайте результат 'realloc()'] (http://stackoverflow.com/questions/605845/do-i-cast- заместитель на результат из-таНоса/605858 # 605858). – Quentin
Его в Mac (Unix), но я думаю, он будет работать так же в Linux. Я удалил бросок, но все еще показывал ту же ошибку. –