【发布时间】:2010-05-11 14:58:52
【问题描述】:
在将结构添加到队列后,以下代码出现分段错误。
当 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 编程了。
标签: c queue segmentation-fault