Я пытаюсь присвоить определенное количество значений из кольцевого буфера массиву.
Буфер выглядит так:
typedef struct
{
char* buffer;
int8_t* buffer_end;
int8_t* data_start;
int8_t* data_end;
int64_t count;
int64_t size;
} ring_buffer;
и я вынимаю данныеиспользование этой функции
uint8_t RB_pop(ring_buffer* rb)
{
if (rb == NULL || rb->buffer == NULL)
return false;
int8_t data = *rb->data_start;
rb->data_start++;
if (rb->data_start == rb->buffer_end)
rb->data_start = rb->buffer;
rb->count--;
return data;
}
Она работает, как задумано, когда я использую ее по одному, но программа падает, если я использую ее внутри цикла с отладчиком, указывающим на "int8_t data = * rb-> data_start;"
Редактировать:
Это тот случай, над которым я работаю.Цикл while не вызывает никаких проблем, он для.Без него код работает с файлом, даже если я вручную повторю цикл, повторяя строку n раз.К сожалению, я не могу ответить ни на один вопрос относительно буфера, я нуб в C, я нашел это в Интернете и не до конца понимаю, Это полный структура: https://codereview.stackexchange.com/questions/16468/circular-ringbuffer/20517
while(true){
if(RB_pop(&test) == 255){
if(RB_pop(&test) == 255){
if(RB_pop(&test) == 254){
char_count = RB_pop(&test);
printf("Char count: ");
printf("%d",char_count);
printf("\n");
printf("Text: ");
int i;
for(i = 0; i < char_count; i ++)
RB_pop(&test);
checksum = RB_pop(&test);
break;
}
}
}
}
Редактировать 2: я начал работать над другими частями программы и испытал то же поведение, также заметил это сообщение от отладчика: «Программа получила сигнал SIGSEGV, Ошибка сегментации.»