LINUX.ORG.RU

Избранные сообщения pdip28

Функция удаляет массив

Форум — Development

Есть такая вот функция

int osmo_hexparse(const char *str, uint8_t *b, int max_len)

{
	int i, l, v;

	l = strlen(str);
	if ((l&1) || ((l>>1) > max_len))
		return -1;

	memset(b, 0x00, max_len);

	for (i=0; i<l; i++) {
		char c = str[i];
		if (c >= '0' && c <= '9')
			v = c - '0';
		else if (c >= 'a' && c <= 'f')
			v = 10 + (c - 'a');
		else if (c >= 'A' && c <= 'F')
			v = 10 + (c - 'A');
		else
			return -1;
		b[i>>1] |= v << (i&1 ? 0 : 4);
	}

	return i>>1;
}

Вторым аргументом я в неё передаю вот такую переменную

uint8_t *b = malloc(20);
Память выделяется успешно, проверял, обратиться можно к любому байту. Вызов osmo_hexparse отрабатывает успешно, возвращает 20. Да вот беда, после этого вызова обращение к любому байту b кроме b[0] вызывает сегфолт. Чего такого нехорошего сделала данная ф-ция с массивом

 , ,

LIKAN
()