구조체를 대기열에 추가 한 후 다음 코드로 분할 오류가 발생합니다.C의 대기열을 사용하는 분할 오류
세그먼트 오류는 MAX_QUEUE가 높게 설정되었을 때 발생하지만 100 (또는 200)을 낮게 설정하면 오류가 발생하지 않습니다. 마지막으로 C로 프로그래밍 한 이후로 어느 정도 도움이되었습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_QUEUE 1000
struct myInfo {
char data[20];
};
struct myInfo* queue;
void push(struct myInfo);
int queue_head = 0;
int queue_size = 0;
int main(int argc, char *argv[])
{
queue = (struct myInfo*) malloc(sizeof(struct myInfo) * MAX_QUEUE);
struct myInfo info;
char buf[10];
strcpy(buf, "hello");
while (1)
{
strcpy(info.data, buf);
push(info);
}
}
void push(struct myInfo info) {
int next_index = sizeof(struct myInfo) * ((queue_size + queue_head) % MAX_QUEUE);
printf("Pushing %s to %d\n", info.data, next_index);
*(queue + (next_index)) = info;
queue_size++;
}
출력 :
Pushing hello to 0
Pushing hello to 20
...
Pushing hello to 7540
Pushing hello to 7560
Pushing hello to 7580
Segmentation fault
을 'struct myInfo queue [MAXQUEUE]'로 선언하고'queue [next_index]'와 같은 표현식으로 요소를 참조하는 것이 현명 할 수도 있습니다. C에서 잠시 동안 프로그래밍하지는 않았지만. –