我试图用 C 语言制作队列(作为一个类(class)项目)。他们提供的演示代码适用于 Borland Turbo C。我正在尝试通过 gcc
重建程序。虽然代码在 Turbo C 中完美运行,但它在运行时在 gcc
中抛出错误作为 Segmentation Fault (core dumped)
。
我没有包含不必要的代码部分。逐行尝试和测试它。
struct node {
int data;
struct node *link;
};
struct queue {
struct node *front;
struct node *rear;
};
void initQ(struct queue *q) {
q->front = q->rear = NULL; // Error : Segmentation Fault! (core dumped)
}
void main() {
struct queue *Q;
initQ(Q);
}
我确定问题与编译器中的 C 版本有关。由于 Turbo C 相当古老,它不支持最新的修复。我在代码的其他各个部分遇到类似的 Segmentation Fault
错误,例如:
void displayQ(struct queue *q) {
struct node *temp;
temp->link = q->front; // Error : Segmentation Fault! (core dumped)
}
问题 1:为什么 gcc 会报这样的运行时错误? (在此代码中)
问题 2:为什么代码在 Turbo C 中运行良好,但在 gcc 中运行不正常?
问题 3:是否有替代这种编程风格的方法?
最佳答案
您需要预留空间(使用malloc
):
struct queue *Q = malloc(sizeof(*Q));
initQ(Q);
或者更好的calloc
:
struct queue *Q = calloc(1, sizeof(*Q));
/* initQ(Q); you don't need this, calloc set all members to NULL */
不要忘记在最后调用 free(Q);
。
关于c - 初始化迭代器指针 : Segmentation Fault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25553636/