UPD2: Алгоритм генерирует байты из выделенного диапазона. Так что это логичная ошибка.Ошибка адресной границы
UPD: modifyed Printf в
printf("%d\n", bytes);
Но результат такой же - SIGSEGV.
Я новичок в чистом c кодировании. Это просто рядом с "привет мир" Приложение:
#include <stdint.h>
#include <stdio.h>
#include <stdbool.h>
void encode2(int src){
unsigned char * result =(unsigned char *) malloc(sizeof(unsigned char) *10);
int bytes = 0;
bool More;
do{
uint8_t Byte = src & 0x7f;
src >> 7;
More = !((((src == 0) && ((Byte & 0x40) == 0)) ||
((src == -1) && ((Byte & 0x40) != 0))));
if (More)
Byte |= 0x80;
result[bytes] = Byte;
bytes++;
} while(More);
printf(bytes);
unsigned char * str = (unsigned char *) malloc(sizeof(unsigned char) * bytes);
int i;
for (i=0; i<bytes; i++){
str[i] = result[i];
}
}
int main(int argc, char *argv[]){
encode2(10);
/*printf("%s\n",p);*/
return 0;
}
Работа 1,»./leb128' останавливали сигнала SIGSEGV (граница ошибки Адрес)
Пробовал Google SIGSEGV, но не смог нашел что не так?
[Пожалуйста, просмотрите эту дискуссию о том, почему бы не использовать возвращаемое значение 'malloc()' и family в 'C'.] (Http://stackoverflow.com/q/605845/2173917). –
где is bound for 'result [bytes]'? –
'printf (bytes);' ..... вы этого не делаете. –