я построить программу, которая перевода базы 10 ти основание 2 и основание 16:бесплатно() функция работает оленья кожа
#include <stdio.h>
int main(void)
{
int b10, b2, b16;
scanf("%d", &b10);//getting a number in base 10
b16 = b10;
b2 = b10;
//******print the number in base 2
int* ba2 = (int*)malloc(b10/2*4);
int i = 0,j;
while (b2 > 0){
ba2[i] = b2 % 2;
b2=b2/2;
i++;
}
for (j = i-1; j >= 0; j--){
printf("%d", ba2[j]);
}
free(ba2);
//**************************
//******print the number in base 16
printf("\n");
int* ba16 = (int*)malloc(b10/16 * 4);
i = 0;
while (b16 > 0){
ba16[i] = b16 % 16;
b16 = b16/16;
i++;
}
for (j = i - 1; j >= 0; j--){
if (ba16[j] < 10)
printf("%d", ba16[j]);
else
printf("%c", 'A' + (ba16[j] - 10));
}
free(ba16);
//****************************
getch();
return 0;
}
по какой-то причине остановки программы на второй бесплатно(). , когда я создал точку прерывания, программа просто остановилась, когда я добрался до бесплатного, никакого сообщения или предупреждения. Может кто-нибудь мне помочь?
Я предлагаю вам рассчитать количество элементов массива в переменной и проверить 'i' на это. –
Например, когда 'b10 = 10',' int * ba16 = (int *) malloc (b10/16 * 4); '==>' int * ba16 = malloc (0); '==>' ba16 [0] = b16% 16; '==> overflow ==> destroy malloc structure ==> не может освободиться. – BLUEPIXY
У вас нет чека, чтобы i или j не превышали пределы массивов. – user3344003